Cod sursa(job #1798652)

Utilizator Dupree7FMI Ciobanu Andrei Dupree7 Data 5 noiembrie 2016 12:38:48
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#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;
}