Cod sursa(job #2225008)

Utilizator cristina-criCristina cristina-cri Data 25 iulie 2018 17:45:18
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <cstdio>
#include <algorithm>
#define GMAX 1005
#define WMAX 50005
#define NRmare 999999999

using namespace std;

int g, w, dp[WMAX];

struct gener
{
    int cantit, cost;
}generator[GMAX];

void umple()
{
    for(int i=1; i<=w; i++)
        dp[i]=NRmare;
}

void dinamica()
{
    for(int i=1; i<=g; i++)
    {
        for(int j=w+generator[i].cantit; j>=generator[i].cantit; j--)
        {
            dp[j]=min(dp[j], dp[j-generator[i].cantit]+generator[i].cost);
            if(j>w)
            {
                dp[w]=min(dp[w], dp[j]);

            }
        }
    }
}

int main()
{

    freopen("energii.in", "r", stdin);
    freopen("energii.out", "w", stdout);

    scanf("%d %d", &g, &w);

    for(int i=1; i<=g; i++)
    {
        scanf("%d %d", &generator[i].cantit, &generator[i].cost);
        if(generator[i].cantit>w)
            generator[i].cantit=w;
    }
    umple();
    dinamica();
    if(dp[w] == NRmare)
        printf("-1");
    else
        printf("%d", dp[w]);
    return 0;
}