Pagini recente » Istoria paginii runda/probleme_de_geometrie/clasament | Cod sursa (job #1448897) | Istoria paginii runda/02local11/clasament | Cod sursa (job #520088) | Cod sursa (job #2012063)
#include <iostream>
#include <stdio.h>
using namespace std;
struct e{int energ, cost;};
e v[1001];
int m[1001][1001];
int main() {
FILE *fin, *fout;
int i, j, g, w;
fin = fopen("energii.in", "r");
fout = fopen("energii.out", "w");
fscanf(fin,"%d%d", &g, &w);
for(i=1;i<=g;i++){
fscanf(fin,"%d%d", &v[i].energ, &v[i].cost);
}
for(i=1;i<=g;i++){
m[i][w+1]=v[i].energ;
m[i][0]=0;
}
for(i=1;i<=w;i++){
m[1][i]=i;
}
for(i=1;i<=g;i++){
for(j=0;j<=w;j++){
if(v[i].energ>j)
m[i][j]=m[i][j-1];
else
m[i][j] = max(m[i-1][j], m[i-1][j-v[i].energ] + v[i].cost);
}
}
if(m[g][w]>0)
fprintf(fout,"%d", m[g][w]);
else
fprintf(fout,"-1");
fclose(fin);
fclose(fout);
return 0;
}