Pagini recente » Cod sursa (job #2008329) | Cod sursa (job #3003145) | Cod sursa (job #828359) | Cod sursa (job #3153346) | Cod sursa (job #1248741)
#include<fstream>
using namespace std;
ifstream fi("ghiozdan.in");
ofstream fo("ghiozdan.out");
const int MAX_N = 20004;
const int MAX_G = 75004;
bool este[MAX_G];
int last[MAX_G];
int nr[MAX_G];
int nr_ob[205];
int sol,x,G;
int i,j,k,N;
int suma_actuala;
int main(){
fi>>N>>G;
for(i=1;i<=N;i++){
fi>>x;
nr_ob[x]++;
}
for(j=1;j<=G;j++) nr[j]=N+5;
este[0]=1;
last[0]=0;
nr[0]=0;
for(i=1;i<=200;i++)
if(nr_ob[i]>0)
for(j=G-i;j>=0;j--)
if(este[j])
for(k=1;k<=nr_ob[i] && j+i*k<=G;k++)
if(nr[j]+k<nr[j+i*k])
{
suma_actuala=j+i*k;
este[suma_actuala]=1;
last[suma_actuala]=i;
nr[suma_actuala]=nr[j]+k;
if(suma_actuala>sol) sol=suma_actuala;
}
fo<<sol<<" "<<nr[sol]<<'\n';
for(j=sol;j>=0;--j)
if(nr[j]+1==nr[sol] && nr_ob[sol-j])
{
--nr_ob[sol-j];
fo<<sol-j<<'\n';
sol=j;
}
fi.close();
fo.close();
return 0;
}