Pagini recente » Cod sursa (job #57562) | Cod sursa (job #3272534) | Cod sursa (job #2095900) | Cod sursa (job #2101248) | Cod sursa (job #1674888)
#include <stdio.h>
FILE *fin = fopen("energii.in", "r");
FILE *fout = fopen("energii.out", "w");
struct ob{
int cant, cost;
};
ob gener[1002];
int s[10000000];
int main(){
int G, W;
int i, j, maxm, minm;
fscanf(fin, "%d", &G);
fscanf(fin, "%d", &W);
for(i = 1; i <= G; i++){
fscanf(fin, "%d %d", &gener[i].cant, &gener[i].cost);
}
maxm = 0;
minm = 999999999;
// s[0] = 1;
for(i = 1; i <= G; i++){
for(j = maxm; j >= 1; j--)
if(s[j]){
if(s[j + gener[i].cant] == 0)
s[j + gener[i].cant] = s[j] + gener[i].cost;
else if(s[j + gener[i].cant] > s[j] + gener[i].cost)
s[j + gener[i].cant] = s[j] + gener[i].cost;
if(maxm < j + gener[i].cant)
maxm = j + gener[i].cant;
if(j + gener[i].cant >= W && minm > s[j + gener[i].cant])
minm = s[j + gener[i].cant];
}
if(s[gener[i].cant] == 0)
s[gener[i].cant] = gener[i].cost;
else if(s[gener[i].cant] > gener[i].cost)
s[gener[i].cant] = gener[i].cost;
if(maxm < gener[i].cant)
maxm = gener[i].cant;
if(j + gener[i].cant >= W && minm > s[j + gener[i].cant])
minm = s[j + gener[i].cant];
}
// for(i = 1; i <= 14; i++)
// fprintf(fout, "%d ", s[i]);
// minm = 999999999;
// for(i = W; i <= maxm; i++)
// if(s[i] < minm && s[i] != 0)
// minm = s[i];
fprintf(fout, "%d\n", minm);
fclose(fin);
fclose(fout);
return 0;
}