Cod sursa(job #2966741)

Utilizator Luka77Anastase Luca George Luka77 Data 18 ianuarie 2023 12:20:09
Problema Energii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <bits/stdc++.h>
using namespace std;

/// INPUT / OUTPUT
ifstream fin("energii.in");
ofstream fout("energii.out");

/// GLOBAL VARIABLES
const int GMAX = 1005, WMAX = 5005, INF = 1e9;
int g, w;
int G[GMAX], W[GMAX];
int dp[GMAX][WMAX];

inline void debug()
{
    for(int i = 1; i <= g; ++ i)
    {
        for(int j = 1; j <= w; ++ j)
        {
            cout << dp[i][j] << ' ';
        }
        cout << '\n';
    }
    cout << '\n';
}

/// SOLUTION (I HOPE)
inline void solution()
{
    for(int i = 0; i <= g; ++ i)
    {
        for(int j = 0; j <= w; ++ j)
        {
            dp[i][j] = INF;
        }
    }
    for(int i = 1; i <= g; ++ i)
    {
        dp[i][G[i]] = min(dp[i-1][G[i]], W[i]);
        for(int j = w; j >= 1; -- j)
        {
            //cout << dp[i][j] << ' ';
            if(j - G[i] >= 0 && (dp[i-1][j]!=INF || dp[i-1][j-G[i]]!=INF))
            {
                //cout << "DA";
                dp[i][j] = min(dp[i-1][j], dp[i-1][j-G[i]] + W[i]);
            }
            else

            {
                dp[i][j] = min(dp[i-1][j], dp[i][j]);
            }
        }
        //cout << '\n';
    }

    debug();

    if(dp[g][w] != INF)
        fout << dp[g][w];
    else
        fout << -1;
}

/// READING THE INPUT
int main()
{
    ios::sync_with_stdio(false);
    fin.tie(NULL);
    fout.tie(NULL);
    fin >> g >> w;
    for(int i = 1; i <= g; ++ i)
    {
        fin >> G[i] >> W[i];
    }
    solution();
}