Cod sursa(job #742150)

Utilizator visanrVisan Radu visanr Data 28 aprilie 2012 18:44:34
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;

#define nmax (1<<16)
#define nmb 1010

long e[nmb], c[nmb], cost[nmb][nmb], g, w;


int main()
{
    freopen("energii.in","r",stdin);
    freopen("energii.out","w",stdout);
    long i, j;
    scanf("%ld %ld", &g, &w);
    for(i = 1; i <= g; ++i)
    {
          scanf("%ld %ld", &e[i], &c[i]);
    }
    for(j = 0; j <= w; ++j) cost[0][j] = nmax;
    for(i = 0; i <= g; ++i) cost[i][0] = nmax;
    for(i = 1; i <= g; ++i)
    {
          for(j = 1; j<= w; ++j)
          {
                if(j > e[i])
                {
                     cost[i][j] = min(cost[i-1][j], cost[i-1][j-e[i]] + c[i]);
                }else
                {
                     cost[i][j] = min(cost[i-1][j], c[i]);
                }
          }
    }
    if(cost[g][w] != nmax) printf("%ld\n", cost[g][w]);
    else printf("-1\n");
    return 0;
}