Pagini recente » Cod sursa (job #852202) | Cod sursa (job #1380835) | Cod sursa (job #1163251) | Cod sursa (job #540775) | Cod sursa (job #1555285)
#include <cstdio>
using namespace std;
int main()
{
int i, j, maxim, n, gmax, c[77777], v[20003], last[77777], ok;
freopen("ghiozdan.in", "r", stdin);
freopen("ghiozdan.out", "w", stdout);
scanf("%d%d", &n, &gmax);
for(i=0; i<n; i++) scanf("%d", v+i);
for(i=1; i<=gmax; i++) c[i]=30000;
//for(i=0; i<n; i++) printf("%d ", v[i]);
c[0]=1;
maxim=0;
last[0]=-1;
for(i=0; i<n; i++){
for(j=maxim; j>=0; j--){
ok=1;
if(c[j]<30000 && j+v[i]<=gmax){
if(c[j+v[i]]>c[j]+1){
c[j+v[i]]=c[j]+1;
if(ok){
last[j+v[i]]=v[i];
ok=0;}
}
if(maxim<j+v[i]) maxim=j+v[i];
}
}
}
i=gmax;
//for(i=0; i<=gmax; i++) printf("%d ", c[i]);
//printf("\n");
//for(i=0; i<=gmax; i++) printf("%d ", last[i]);
while(c[i]==30000) i--;
printf("%d %d\n", i, c[i]-1);
while(last[i]>=0){
printf("%d\n", last[i]);
i=i-last[i];
}
return 0;
}