Pagini recente » Cod sursa (job #649120) | Cod sursa (job #949776) | Cod sursa (job #2091855) | Utilizatori inregistrati la FMI No Stress 9 Warmup | Cod sursa (job #3140098)
#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;
}
}
}