Pagini recente » Cod sursa (job #913528) | Cod sursa (job #400862) | Cod sursa (job #517274) | Cod sursa (job #262333) | Cod sursa (job #801179)
Cod sursa(job #801179)
#include<fstream>
using namespace std;
int n,G;
int nr[205],best[75010],pred[75010];
int main()
{
int i,j,k,x;
ifstream fin("ghiozdan.in");
fin>>n>>G;
for(i=1;i<=n;i++)
{
fin>>x;
nr[x]++;
}
fin.close();
best[0]=1; // 1 fictiv pentru a usura implementarea si il scad la final din solutie
for(i=200;i>0;i--)
{
if(nr[i]>0)
{
for(j=G-i;j>=0;j--)
{
if(best[j]>0)
{
for(k=1;k<=nr[i] && j+k*i<=G && best[j+k*i]==0;k++)
{
best[j+k*i]=best[j]+k;
pred[j+k*i]=i;
}
}
}
}
}
i=G;
while(best[i]==0)
i--;
ofstream fout("ghiozdan.out");
fout<<i<<' '<<(best[i]-1)<<"\n";
while(i)
{
fout<<pred[i]<<"\n";
i-=pred[i];
}
fout.close();
return 0;
}