Cod sursa(job #2368908)

Utilizator crion1999Anitei cristi crion1999 Data 5 martie 2019 19:20:46
Problema Energii Scor 0
Compilator cpp-64 Status done
Runda pregatire_cls12_oji Marime 1.3 kb
#include <iostream>
#include <fstream>
#include <algorithm>

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

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

int N, W;

pair<int, int> generators[NMAX];

int dp[NMAX][WMAX];
int energi[NMAX][WMAX];


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

    for(int i = 0; i <= N; ++i)
        for(int j = 0; j <= W; ++j)
            dp[i][j] = inf;

    for(int i = 1; i <= N; ++i)
    {
        for(int j = 1; j <= W; ++j)
        {
            if(generators[i].first > dp[i-1][j])
                dp[i][j] = dp[i-1][j];
            if(j <= generators[i].second)
                dp[i][j] = generators[i].first;

            for(int k = 1; k <= j; ++k)
            {
                if(dp[i-1][k] != inf)
                {
                    if(k + generators[i].second >= j)
                    {
                        dp[i][j] = min(dp[i][j], generators[i].first + dp[i-1][k]);
                    }
                }
            }
        }
    }


    if(dp[N][W] == inf)
        fo << -1;
    else
        fo << dp[N][W];

}