Cod sursa(job #2503990)

Utilizator KernelovicNegrean Victor Kernelovic Data 4 decembrie 2019 09:11:23
Problema Energii Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <bits/stdc++.h>
#define MAXIM 10001

using namespace std;

int dp[MAXIM];

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

    int n, w, EG, CG, z, pos, mine = -1;
    cin >> n >> w;

    for(int i = 0; i <= w; i++)
    {
        dp[i] = -1;
    }

    for(int i = 0; i < n; i++)
    {
        cin >> EG >> CG;

        for(int j = w; j >= 0; j--)
        {
            if(dp[j] != -1)
            {
                z = dp[j] + CG;
                pos = EG + j;

                if(pos >= w && (mine == -1 || z == mine))
                {
                    mine = z;
                }
                else if(pos < w && (dp[pos] == -1 || z < dp[pos]))
                {
                    dp[pos] = z;
                }
            }
        }

        if(EG >= w && (mine == -1 || CG < mine))
        {
            mine = CG;
        }
        else if(EG < w && (dp[EG] == -1 || CG < dp[EG]))
        {
            dp[EG] = CG;
        }
    }
    cout << mine;
    return 0;
}