Pagini recente » Cod sursa (job #2393337) | Cod sursa (job #1632452) | Cod sursa (job #1937065) | Cod sursa (job #499196) | Cod sursa (job #1870235)
#include<stdio.h>
using namespace std;
#define MAXN 1001
#define MAXG 5000001
int e[MAXN], c[MAXN], d[2][MAXG];
//D[i][j] - profitul maxim pe care-l putem obtine adaugand o submultime a primelor i obiecte, insumand greutatea j
int main(){
FILE*fin=fopen("energii.in", "r");
FILE*fout=fopen("energii.out", "w");
int n, w, i, j, min, cmax, emax;
fscanf(fin, "%d%d", &n, &w);
cmax=emax=0;
for(i=1; i<=n; i++){
fscanf(fin, "%d%d", &e[i], &c[i]);
emax+=e[i];
cmax+=c[i];
}
min=MAXG*2;
if(emax<w)
fprintf(fout, "-1");
else{
for(i=1; i<=n; i++){
for(j=c[i]; j<=cmax; j++){
d[1][j]=d[0][j];
if(e[i]<=j)
if(d[0][j-e[i]]+c[i]>d[1][j])
d[1][j]=d[0][j-e[i]]+c[i];
if(d[1][j]>=w && j<min)
min=j;
}
for(j=0; j<=w; j++){
d[0][j]=d[1][j];
d[1][j]=0;
}
}
fprintf(fout, "%d", min);
}
return 0;
}