Cod sursa(job #2370123)

Utilizator crion1999Anitei cristi crion1999 Data 6 martie 2019 10:48:03
Problema Energii Scor 20
Compilator cpp-64 Status done
Runda pregatire_cls12_oji Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <algorithm>

#define inf 0x3f3f3f3f
#define NMAX 1005
#define WMAX 15005
using namespace std;

ifstream fi("energii.in");
ofstream fo("energii.out");

int N, W;

pair<int, int> generators[NMAX];

int dp[WMAX];


int main()
{
    fi >> N;
    fi >> W;
    int a, b;
    for(int i = 1; i <= N; ++i)
    {
        fi >> a >> b;
        generators[i] = {a, b};
    }

    for(int i = 1; i <= WMAX; ++i)
        dp[i] = -1;

    for(int i = 1; i <= N; ++i)
    {
        for(int j = W; j >= 0; --j)
        {
            if(dp[j] != -1)
            {
                if(dp[j + generators[i].first] != -1)
                    dp[j + generators[i].first] = min(dp[j + generators[i].first], generators[i].second + dp[j]);
                else
                    dp[j + generators[i].first] = generators[i].second;
            }
        }
    }
    int minn = inf;
    for(int i = W; i <= W + 10000; ++i)
        if(dp[i] != -1)
            minn = min(minn, dp[i]);

    if(minn == inf)
        fo << -1;
    else
        fo << minn;

}