Cod sursa(job #3140098)

Utilizator NiffSniffCojocaru Calin Marcu NiffSniff Data 3 iulie 2023 19:55:02
Problema Ghiozdan Scor 58
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <fstream>
#include <algorithm>
#include <bitset>
#include <vector>
using namespace std;
string file = "ghiozdan";
ifstream cin (file + ".in");
ofstream cout (file + ".out");
vector <char> v[75001];
vector <int> available;
int obiecte[20001];
bitset <75001> exista;
int main()
{
    int n,g;
    cin >> n >> g;
    for (int i=1; i<=n; i++)
    {
        cin >> obiecte[i];
    }
    sort(obiecte+1,obiecte+n+1);
    for (int i=n; i>=1; i--)
    {
        vector <int> temp;
        int x = obiecte[i];
        for (int greutate : available)
        {
            if (greutate+x > g)
                continue;
            if (!exista[greutate + x])
            {
                temp.push_back(greutate+x);
                exista[greutate+x] = 1;
                v[greutate+x] = v[greutate];
                v[greutate+x].push_back(x);
            }
            else if (v[greutate].size() + 1 < v[greutate+x].size())
            {
                v[greutate+x] = v[greutate];
                v[greutate+x].push_back(x);
            }
        }
        v[x] = {x};
        if (!exista[x])
        {
            exista[x] = 1;
            temp.push_back(x);
        }

        for (int x : temp)
        {
            available.push_back(x);
        }
    }
    for (int i=g; i>=1; i--)
    {
        if (v[i].size())
        {
            cout << i << ' ' << v[i].size();
            for (int x : v[i])
            {
                cout << '\n' << x;
            }
            break;
        }
    }
}