Cod sursa(job #2240239)

Utilizator mihailescu_eduardMihailescu Eduard-Florin mihailescu_eduard Data 12 septembrie 2018 19:57:32
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <cstdio>
#include <algorithm>
FILE *fin = freopen("energii.in","r",stdin); FILE *fout = freopen("energii.out","w",stdout);

static const int NMAX = 1005;
static const int INF = 1e9;

/* ---------- Data ----------- */
int energii[NMAX], cost[NMAX], w, g, dp[NMAX];
/* ---------- Data ----------- */

// dp = costul minim pentru a face i energie

void ReadInput()
{
    scanf("%d%d",&g,&w);
    for(int i = 1; i<= g; ++i)
    {
        scanf("%d%d",&energii[i],&cost[i]);
    }
}

void Solve()
{
    for(int i= 1; i<= w; ++i)
    {
        dp[i] = INF;
    }
    for(int i = 1; i<= g; ++i)
    {
        for(int k = w; k >= 0; k--)
        {
            if(dp[k] != INF)
            {
                if(k + energii[i] >= w)
                {
                    dp[w] = std::min(dp[w],dp[k] + cost[i]);
                }
                else
                {
                    dp[k+energii[i]] = std::min(dp[k+energii[i]], dp[k] + cost[i]);
                }
            }
        }
    }
}
void PrintResult()
{
    if(dp[w] == INF)
        printf("-1");
    else
        printf("%d",dp[w]);
}

int main()
{
    ReadInput();
    Solve();
    PrintResult();
    return 0;
}