Pagini recente » Cod sursa (job #417762) | Cod sursa (job #1588203) | Cod sursa (job #351055) | Cod sursa (job #1582377) | Cod sursa (job #2699329)
#include <iostream>
#include <stdio.h>
#define NMAX 1000
#define EMAX 10000
using namespace std;
int f[EMAX + 1]; // f[i] -- pretul minim cand energia totala este minim i
int minim(int a, int b) {
return a < b ? a : b;
}
int main() {
FILE *fin, *fout;
int n, k, i, j, E, P;
fin = fopen("energii.in", "r");
fscanf(fin, "%d%d", &n, &k);
for (i = 1; i <= k; i++)
f[i] = EMAX * NMAX + 1;
for (i = 0; i < n; i++) {
fscanf(fin, "%d%d", &E, &P);
for (j = k; j >= 0; j--)
if (j - E >= 0 && f[j - E] <= EMAX * NMAX)
f[j] = minim(f[j], f[j - E] + P);
else if (j - E < 0)
f[j] = minim(f[j], P);
}
fclose( fin );
fout = fopen("energii.out", "w");
if (f[k] <= EMAX * NMAX)
fprintf(fout, "%d", f[k]);
else
fprintf(fout, "%d", -1);
fclose( fout );
return 0;
}