Pagini recente » Cod sursa (job #2252074) | Cod sursa (job #1063613) | Cod sursa (job #680206) | Cod sursa (job #2112092) | Cod sursa (job #1224485)
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <limits.h>
#define FIN "energii.in"
#define FOUT "energii.out"
#define GEN 1002
#define ENERG 5002
#define MIN(a,b) ((a)<(b))?(a):(b)
int EG[GEN], CG[GEN], G, W;
int co[GEN][ENERG];
int cost(){
int i,j,S;
for(i=1, S=0; i <= G; i++){
S += EG[i];
}
if(S < W){
return -1;
}
for(i=1; i <= W; i++){
co[0][i] = INT_MAX;
}
for(i=1; i <= G; i++){
for(j=1; j <= W; j++){
if(EG[i] > j){
co[i][j] = MIN(co[i-1][j], CG[i]);
} else {
if(co[i-1][j] == INT_MAX && co[i-1][j-EG[i]] == INT_MAX){
co[i][j] = INT_MAX;
} else if (co[i-1][j] == INT_MAX){
co[i][j] = co[i-1][j-EG[i]] + CG[i];
} else if (co[i-1][j-EG[i]] == INT_MAX){
co[i][j] = co[i-1][j];
} else {
co[i][j] = MIN(co[i-1][j], co[i-1][j-EG[i]]+CG[i]);
}
}
}
}
return co[G][W];
}
int main(){
int i;
FILE *in = fopen(FIN, "rt");
FILE *out = fopen(FOUT, "wt");
fscanf(in, "%d%d", &G, &W);
for(i=1; i <= G; i++){
fscanf(in, "%d%d", &EG[i], &CG[i]);
}
fprintf(out, "%d", cost());
return 0;
}