Pagini recente » Cod sursa (job #1060548) | Cod sursa (job #990768) | Cod sursa (job #3139869) | Cod sursa (job #720717) | Cod sursa (job #1713848)
#include <cstdio>
#include <algorithm>
using namespace std;
int Mini,i,n,g,c[1001],w[1001];
int d[2][10001];
int main()
{
freopen("energii.in", "r", stdin);
freopen("energii.out", "w", stdout);
scanf("%d%d", &n, &g);
int Max=g;Mini=1000000000;
for(i=1;i<=n;++i){
scanf("%d%d", &w[i],&c[i]),Max=max(Max,w[i]);
Mini=min(Mini,w[i]);
}
int l=0;
for(int cw=Mini;cw<=Max;++cw)
d[0][cw]=d[1][cw]=1000000000;
for(i=1;i<=n;++i,l=1-l){
for(int cw=0;cw<=Max;++cw){
d[1-l][cw]=d[l][cw];
if(w[i]<=cw){
if(d[1-l][cw]==1000000000&&cw-w[i]>=0){
if(d[1-l][cw-w[i]]==1000000000)
d[1-l][cw]=c[i];
else d[1-l][cw]=d[1-l][cw-w[i]]+c[i];
}
else d[1-l][cw]=min(d[1-l][cw],d[1-l][cw-w[i]]+c[i]);
}
}
}
if(Max>g){
int Min=1000000000;
for(i=g;i<=Max;++i)
Min=min(d[1][g],Min);
printf("%d", Min);
}
else
printf("%d", d[1][g]);
return 0;
}