Pagini recente » Cod sursa (job #2883757) | Cod sursa (job #1025709) | Cod sursa (job #1335104) | Cod sursa (job #1029862) | Cod sursa (job #1175507)
#include <cstdio>
#include <climits>
using namespace std;
int a[1005][5005], e[1005], c[1005], En, n;
void read () {
FILE *in = fopen ("energii.in", "r");
fscanf (in, "%d%d", &n, &En);
for (int i = 1; i <= n; ++i)
fscanf (in, "%d%d", &e[i], &c[i]);
fclose (in);
}
int exist (int i, int j, int E) {
if (j - E < 0)
return 0;
if (a[i - 1][j - E] == INT_MAX)
return 0;
return j;
}
int min (int a, int b) {
if (a < b)
return a;
return b;
}
int main()
{
int b;
read ();
for (int i = 1; i <= En; ++i)
a[0][i] = INT_MAX;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= En; ++j)
if (e[i] < j && e[i] + exist(i, j, e[i]) < j)
a[i][j] = INT_MAX;
else {
if (j - e[i] < 0)
b = c[i];
else b = c[i] + a[i - 1][j - e[i]];
a[i][j] = min (a[i - 1][j], b);
}
FILE *out = fopen ("energii.out", "w");
if (a[n][En] == INT_MAX)
fprintf (out, "-1");
else fprintf (out, "%d", a[n][En]);
fclose (out);
return 0;
}