Pagini recente » Cod sursa (job #2216382) | Cod sursa (job #1977178) | Cod sursa (job #2848497) | Cod sursa (job #2917716) | Cod sursa (job #18616)
Cod sursa(job #18616)
#include<stdio.h>
#define maxg 64000
#define maxn 20000
unsigned int N,G,g[maxn];
unsigned int c[2][maxg],nr[2][maxg];
int main ()
{unsigned int i,j;
freopen("ghiozdan.in","r",stdin);
scanf("%d %d\n",&N,&G);
for(i=1;i<=N;i++) {scanf("%d\n",&g[i]); c[0][i]=0; }
unsigned int max, minnr;
max=0; minnr=100;
for(i=1;i<=N;i++)
for(j=1;j<=G;j++)
if (i%2==1)
{c[i%2][j]=c[i%2-1][j];nr[i%2][j]=nr[i%2-1][j];
if(j>=g[i]) {if((g[i]+c[i%2-1][j-g[i]]<=G) &&(g[i]+c[i%2-1][j-g[i]]>=c[i%2-1][j])) {c[i%2][j]=g[i]+c[i%2-1][j-g[i]];
if((c[i%2][j]==c[i%2-1][j]) && (nr[i%2-1][j-g[i]]+1>nr[i%2-1][j]) ) nr[i%2][j]=nr[i%2-1][j];
else nr[i%2][j]=nr[i%2-1][j-g[i]]+1;
}
}
if (c[i%2][j]>max) {max=c[i%2][j]; minnr=nr[i%2][j];}
else if(c[i%2][j]==max && minnr>nr[i%2][j]) {minnr=nr[i%2][j];}
}
else
{c[i%2][j]=c[i%2+1][j];nr[i%2][j]=nr[i%2+1][j];
if(j>=g[i]) {if((g[i]+c[i%2+1][j-g[i]]<=G) &&(g[i]+c[i%2+1][j-g[i]]>=c[i%2+1][j]))
{c[i%2][j]=g[i]+c[i%2+1][j-g[i]];
if((c[i%2][j]==c[i%2+1][j]) && (nr[i%2+1][j-g[i]]+1>nr[i%2+1][j]) ) nr[i%2][j]=nr[i%2+1][j];
else nr[i%2][j]=nr[i%2+1][j-g[i]]+1;
}
}
if (c[i%2][j]>max) {max=c[i%2][j]; minnr=nr[i%2][j];}
else if(c[i%2][j]==max && minnr>nr[i%2][j]) {minnr=nr[i%2][j];}
}
freopen("ghiozdan.out","w",stdout);
printf("%d %d\n",c[N%2][G],nr[N%2][G]);
return 0;}