Pagini recente » Cod sursa (job #2535337) | Cod sursa (job #1530421) | Cod sursa (job #2403995) | Cod sursa (job #1199339) | Cod sursa (job #34669)
Cod sursa(job #34669)
#include <cstdio>
#include <algorithm>
#include <string>
using namespace std;
int dp[5001];
bool x[5001];
int c[1001], e[1001], n, S;
int main()
{
freopen("energii.in", "r", stdin);
freopen("energii.out", "w", stdout);
scanf("%d\n", &n);
scanf("%d\n", &S);
for(int i=1;i<=n;i++) scanf("%d %d\n", &e[i], &c[i]);
long long sum=0;
for(int i=1;i<=n;i++) sum+=e[i];
if(sum<(long long)S) { printf("-1\n"); return 0;}
memset(dp, 0x3f3f3f3f ,sizeof(dp));
x[0]=1;
dp[0]=0;
x[e[1]]=1;
dp[e[1]]=c[1];
int i, j;
for(i=2;i<=n;i++)
for(j=S;j>=0;j--)
if(x[j])
{
if(j+e[i]>=S)
{
//printf("%d %d %d\n", j+e[i], j, dp[j]+c[i]);
x[S]=1;
dp[S]=min(dp[j]+c[i], dp[S]);
}
else
{
x[j+e[i]]=1;
dp[j+e[i]]=min(dp[j]+c[i], dp[j+e[i]]);
}
}
// for(i=1;i<=S;i++) printf("%d ",dp[i]);
printf("%d\n", dp[S]);
return 0;
}