Pagini recente » Cod sursa (job #2422782) | Cod sursa (job #1939187) | Cod sursa (job #2254216) | Cod sursa (job #2639969) | Cod sursa (job #1953597)
#include <fstream>
#include <vector>
#define INF 10000000
#define pb push_back
#define nMax 20001
#define gMax 75001
#define gEachMax 201
using namespace std;
ifstream fin("ghiozdan.in");
ofstream fout("ghiozdan.out");
int n, G, val;
int dp[gMax], frecv[gEachMax], last[gMax], gObiect[gMax];
vector<int> Sol;
int main()
{
int val;
fin>>n>>G;
for(int i=1; i<=n; i++)
{
fin>>val;
frecv[val]++;
}
for(int i=1; i<gEachMax; i++)
dp[i]=INF;
for(int i=gEachMax-1; i>=1; i--)
if(frecv[i]!=0)
for(int j=G-i; j>=0; j--)
if(dp[j]!=INF)
for(int k=1; k<=frecv[i] && j+i*k<=G; k++)
if(dp[j+i*k]==INF
)
dp[j+i*k]=dp[j]+k, last[j+i*k]=j, gObiect[j+i*k]=i;
for(int i=G; i>=0; i--)
{
if(dp[i]!=INF)
{
fout<<i<<" ";
while(i)
{
int nrObiecte=(i-last[i])/gObiect[i];
while(nrObiecte)
{
Sol.pb(gObiect[i]);
nrObiecte--;
}
i=last[i];
}
break;
}
}
fout<<Sol.size()<<'\n';
for(vector<int>::iterator it=Sol.begin(); it!=Sol.end(); it++)
fout<<*it<<'\n';
}