Pagini recente » Cod sursa (job #3293763) | Cod sursa (job #628678) | Cod sursa (job #2390092) | Cod sursa (job #815903) | Cod sursa (job #1798596)
#include <fstream>
#include <limits.h>
using namespace std;
ifstream f("energii.in");
ofstream g("energii.out");
#define inf INT_MAX
int minim(unsigned int a, unsigned int b)
{
return (a > b) ? b : a;
}
int Energii(int e[], int c[], int G, int W)
{
int i, j;
int **a = new int*[G + 1];
for(i = 0; i < G + 1; i++)
a[i] = new int[W + 1];
for(i = 0; i < G + 1; i++)
for(j = 0; j < W + 1; j++)
{
if(i == 0 || j == 0)
a[i][j] = inf;
else
{
if(e[i - 1] > j)
a[i][j] = a[i - 1][j];
else if(e[i - 1] == j)
a[i][j] = minim(a[i - 1][j], c[i - 1]);
else if(e[i - 1] < j)
a[i][j] = minim(a[i - 1][j], a[i - 1][j - e[i - 1]] + c[i - 1]);
}
}
int r = a[G][W];
for(i = 0; i < G + 1; i++)
delete[] a[i];
delete[] a;
return r;
}
int main()
{
int G, W, i;
f >> G >> W;
int *e = new int[G + 1], *c = new int[G + 1];
for(i = 0; i < G; i++)
{
f >> e[i] >> c[i];
if(e[i] > W)
e[i] = W;
}
int d = Energii(e, c, G, W);
if(d == inf)
g << -1;
else
g << d;
delete[] e;
delete[] c;
return 0;
}