Pagini recente » Cod sursa (job #2404119) | Cod sursa (job #1697761) | Cod sursa (job #245015) | Cod sursa (job #2248039) | Cod sursa (job #1369981)
#include <cstdio>
int n, G, cw, l;
int D[2][75100], W[25100], P[25100];
void citire()
{
int i;
scanf("%d%d", &n, &G);
for(i=1;i<=n;++i)
{
scanf("%d", &W[i]);
P[i]=1;
}
}
int minim(int a, int b)
{
if(a<b) return a;
else return b;
}
void rezolva_problema()
{
int i;
citire();
l=0;
for(i=1;i<=n;++i, l=1-l)
for(cw=0;cw<=G;++cw)
{
D[1-l][cw]=D[l][cw];
if(W[i]<=cw){
if(W[i]<cw)
{
if(D[1-l][cw]&&D[l][cw-W[i]])
D[1-l][cw]=minim(D[1-l][cw], D[l][cw-W[i]]+P[i]);
else
if(!D[1-l][cw]&&D[l][cw-W[i]])
D[1-l][cw]=D[l][cw-W[i]]+P[i];
}
else
if(W[i]==cw&&D[1-l][cw])
D[1-l][cw]=minim(D[1-l][cw], P[i]);
else
D[1-l][cw]=P[i];}
}
int pmax=0;
for(cw=G;cw>=0;--cw)
if(D[l][cw]&&(!pmax)){
printf("%d %d",cw, D[l][cw]);
pmax=1;
}
}
int main()
{
freopen("ghiozdan.in", "r", stdin);
freopen("ghiozdan.out", "w", stdout);
rezolva_problema();
return 0;
}