Pagini recente » Cod sursa (job #1540904) | Cod sursa (job #1121158) | Cod sursa (job #2706428) | Cod sursa (job #2866783) | Cod sursa (job #705719)
Cod sursa(job #705719)
#include <stdio.h>
#include <climits>
#define MAX_GEN 1002
#define MAX_EN 5002
#define BIG_NO 1<<30
#define FOR(i, a, b) for (i = a; i <= b; ++i)
inline int min(int a, int b){
return a < b? a : b;
}
int main(){
freopen("energii.in","r", stdin);
freopen("energii.out","w", stdout);
int g, w, eg[MAX_GEN], cg[MAX_GEN], **cmin, i, j;
scanf("%d%d", &g, &w);
FOR(i, 1, g){
scanf("%d %d", eg + i, cg + i);
}
fclose(stdin);
/* allocate the 2D e array */
cmin = new int*[g+1];
FOR(i,0,g){
cmin[i] = new int[w+1];
}
/* compute the minimum cost in matrix cmin[i][j],
the minimum cost of choosing from generators 1 to i, with a minimum energy requirement of j
*/
FOR(j,0,w){
cmin[0][j] = BIG_NO;
}
FOR(i,0, g){
cmin[i][0] = BIG_NO;
}
FOR(i, 1, g){
FOR(j,1,w){
if(j > eg[i]){
cmin[i][j] = min(cmin[i-1][j], cmin[i-1][j-eg[i]] + cg[i]);
}
else {
cmin[i][j] = min(cmin[i-1][j], cg[i]);
}
}
}
printf("%d", cmin[g][w] != BIG_NO ? cmin[g][w] : -1);
fclose(stdout);
/* deallocate e 2D array */
FOR(i, 0, g){
delete[] cmin[i];
}
delete[] cmin;
return 0;
}