Pagini recente » Cod sursa (job #1839892) | Cod sursa (job #2746076) | Cod sursa (job #1256946) | Cod sursa (job #2381491) | Cod sursa (job #484024)
Cod sursa(job #484024)
#include <stdio.h>
#define Nmax 20002
#define Gmax 75002
#define Vmax 202
int Nr_min[Gmax],HP[Gmax],V[Nmax],Cnt[Vmax];
int N,G,vmax;
int main(){
int i,j,k;
freopen("ghiozdan.in","r",stdin);
freopen("ghiozdan.out","w",stdout);
scanf("%d%d",&N,&G);
for(i=1;i<=N;++i){
scanf("%d",&V[i]);
Cnt[V[i]]++;
vmax=vmax>V[i] ? vmax:V[i];
}
Nr_min[0]=1;
for(i=vmax;i>=1;--i)
if( Cnt[i] )
for(j=G-i;j>=0;--j)
if( Nr_min[j] )
for(k=1;k<=Cnt[i] && j+i*k<=G ;++k)
if( !Nr_min[j+i*k] ){
Nr_min[j+i*k]=Nr_min[j]+k;
HP[j+i*k]=j+i*(k-1);
}
else break;
while( !Nr_min[G] ) --G;
printf("%d %d\n",G,Nr_min[G]-1);
while( G ){
printf("%d\n",G-HP[G]);
G=HP[G];
}
fclose(stdin); fclose(stdout);
return 0;
}