Pagini recente » Cod sursa (job #2376579) | Cod sursa (job #854239) | Cod sursa (job #1277784) | Cod sursa (job #2100546) | Cod sursa (job #2502092)
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
int n,emin,energie[1005],cost[1005],dp[10003],suma,minim,dp1[10003];
int main () {
freopen("energii.in","r",stdin);
freopen("energii.out","w",stdout);
scanf("%d%d", &n, &emin);
for(int i=1;i<=n;++i)
scanf("%d%d", &energie[i], &cost[i]),suma+=energie[i];
if(suma<emin) {
printf("-1");
return 0;
}
dp[energie[1]]=cost[1];
for(int i=2;i<=n;++i) {
for(int j=10001;j-energie[i]>=0;--j)
if(dp[j-energie[i]]!=0) {
if(dp[j]!=0)
dp1[j]=min(dp[j],dp[j-energie[i]]+cost[i]);
else
dp1[j]=dp[j-energie[i]]+cost[i];
}
for(int j=0;j<=10001;++j)
if(dp1[j]!=0)
dp[j]=dp1[j],dp1[j]=0;
if(dp[energie[i]]==0)
dp[energie[i]]=cost[i];
else
dp[energie[i]]=min(cost[i],dp[energie[i]]);
}
minim=1e9;
for(int i=emin;i<=10001;++i)
if(dp[i]!=0)
minim=min(minim,dp[i]);
printf("%d", minim);
return 0;
}
//de la dreapta ;la stanga;