Pagini recente » Cod sursa (job #2440027) | Cod sursa (job #2761020) | Cod sursa (job #2566303) | Cod sursa (job #435209) | Cod sursa (job #212305)
Cod sursa(job #212305)
#include <stdio.h>
#define INF 1000000000
int n, w;
int e[1010], c[1010];
int a[5010][1010];
void read() {
FILE* f = fopen("energii.in", "rt");
fscanf(f, "%d %d", &n, &w);
for (int i = 1; i <= n; i++) {
fscanf(f, "%d %d", &e[i], &c[i]);
}
fclose(f);
}
inline int get(int e, int g) {
return (e <= 0) ? 0 : a[e][g];
}
void compute() {
a[0][0] = 0;
for (int i = 1; i <= w; i++) {
a[i][0] = INF;
}
for (int i = 1; i <= w; i++) {
for (int j = 1; j <= n; j++) {
a[i][j] = a[i][j - 1];
int alt = get(i - e[j], j - 1) + c[j];
if (alt < a[i][j]) {
a[i][j] = alt;
}
}
}
}
void debug() {
for (int i = 1; i <= w; i++) {
printf("%2d: ", i);
for (int j = 1; j <= n; j++) {
printf("%12d", a[i][j]);
}
printf("\n");
}
}
void write() {
FILE* f = fopen("energii.out", "wt");
fprintf(f, "%d\n", (a[w][n] == INF) ? -1 : a[w][n]);
fclose(f);
}
int main() {
read();
compute();
//debug();
write();
return 0;
}