Pagini recente » Cod sursa (job #921359) | Cod sursa (job #2790266) | Cod sursa (job #2069524) | Cod sursa (job #1204305) | Cod sursa (job #3173619)
#include <bits/stdc++.h>
using namespace std;
const int nax=1000005;
const int mod=1e9+7;
const int inf=INT_MAX;
int n;
int G,W;
int e,c;
struct gen{
int e,c;
};
int dp[nax];
int exists[nax];
int main(){
freopen("energii.in","r",stdin);
freopen("energii.out","w",stdout);
long long suma=0;
scanf("%d %d",&G,&W);
vector <gen> g;
for(int i=1;i<=G;i++){
scanf("%d %d",&e,&c);
g.push_back({.e=e,.c=c});
suma+=e;
}
if(suma<W){
printf("-1");
return 0;
}
exists[0]=true;
// for(int i=1;i<=G;i++){
// printf("%d %d\n",g[i].e,g[i].c);
// }
for(int i=0;i<G;i++){
for(int q=suma;q>=g[i].e;q--){
if(exists[q-g[i].e]){
if(exists[q]){
dp[q]=min(dp[q],dp[q-g[i].e]+g[i].e);
}else{
dp[q]=dp[q-g[i].e]+g[i].c;
exists[q]=true;
}
}
}
}
int ans=inf;
for(int i=W;i<=suma;i++){
if(dp[i]) ans=min(ans,dp[i]);
// printf("%d ",dp[i]);
}
printf("%d",ans);
return 0;
}