Pagini recente » Cod sursa (job #1674756) | Cod sursa (job #1911343) | Cod sursa (job #3286505) | Cod sursa (job #2023081) | Cod sursa (job #1798652)
#include <fstream>
#include <iostream>
#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[G + 1][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]);
}
}
return a[G][W];
}
int main()
{
int G, W, i;
f >> G >> W;
int e[G], c[G];
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;
return 0;
}