Pagini recente » Cod sursa (job #3002661) | Cod sursa (job #1868707) | Cod sursa (job #1870319)
#include<stdio.h>
using namespace std;
#define MAXN 1001
#define MAXG 16001
#define INF 100000000
int e[MAXN], c[MAXN], d[MAXN][MAXG];
//D[i][j] - profitul maxim pe care-l putem obtine adaugand o submultime a primelor i obiecte, insumand greutatea j
int minim( int a , int b ){
if(a<b)
return a;
return b;
}
int main(){
FILE*fin=fopen("energii.in", "r");
FILE*fout=fopen("energii.out", "w");
int n, w, i, j, 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]);
cmax+=c[i];
}
for(i=0; i<=MAXN-1; i++)
for(j=0; j<=MAXG-1; j++)
d[i][j]=INF;
// if(emax<w)
// fprintf(fout, "-1");
for(i=1; i<=n; i++){
for(j=1; j<=w; j++){
d[i][j]=d[i-1][j];
if(e[i]<j)
d[i][j]=minim(d[i-1][j-e[i]]+c[i], d[i][j]);
else
d[i][j]=minim(d[i][j], c[i]);
}
}
if(d[n][w]==INF)
fprintf(fout, "-1");
else
fprintf(fout, "%d", d[n][w]);
return 0;
}