Pagini recente » Cod sursa (job #704422) | Cod sursa (job #1975881) | Cod sursa (job #1698578) | Cod sursa (job #368338) | Cod sursa (job #1721639)
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
pair <int,int> v[1001];
int d[2][5001];
int main()
{
FILE *fin=fopen ("energii.in","r");
FILE *fout=fopen ("energii.out","w");
int n,k,t,s=0;
fscanf (fin, "%d%d", &n, &k);
for (int i=1; i<=n; i++){
fscanf (fin, "%d%d", &v[i].first, &v[i].second);
s=s+v[i].first;
}
if (s<k){
fprintf (fout,"-1");
return 0;
}
// d[i][j] == costul maxim pe care il putem obtine selectand o submultime a primelor i elemente
// cu suma greutatilor j
//for (int j=0;j<=k;j++)
// d[1][j]=d[0][j]=1000000000;
t=1;
for (int i=1; i<=n; i++){
for (int j=0; j<=k; j++){
d[t][j] = d[1-t][j];
if ((j>=v[i].first || (j>v[i].first && d[1-t][j-v[i].first]==d[1-t][j-v[i].first-1])) && (d[t][j]==0 || d[1-t][j-v[i].first]+v[i].second > d[t][j]))
d[t][j] = d[1-t][j-v[i].first]+v[i].second;
else if (j>=v[i].first && (d[t][j]==0 || d[1-t][j-v[i].first]+v[i].second > d[t][j]))
d[t][j] = d[1-t][j-v[i].first]+v[i].second;
//printf ("%d ",d[t][j]);
}
t=1-t;
//printf ("\n");
}
fprintf (fout,"%d",d[1-t][k]);
return 0;
}