Cod sursa(job #2980631)

Utilizator AnSeDraAndrei Sebastian Dragulescu AnSeDra Data 16 februarie 2023 18:14:46
Problema Energii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>

using namespace std;

const int Gmax = 5001;

int dp[Gmax + 1];

int main()
{
    ifstream fin("energii.in");
    ofstream fout("energii.out");

    int n, w, e, c;

    fin >> n >> w;

    ///dp[i] = costul minim pentru a fi repornita o centrala care necesita o cantitate de energie mai mare sau egala cu i

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

    for(int i = 1; i <= n; i++){
        fin >> e >> c;

        for(int j = w; j >= e; j--){
            if(dp[j - e] != -1){
                if(dp[j] == -1){
                    dp[j] = dp[j - e] + c;
                }
                else{
                    dp[j] = min(dp[j], dp[j - e] + c);
                }
            }
        }

        for(int j = e - 1; j >= 1; j--){
            if(dp[j] == -1){
                dp[j] = c;
            }
            else{
                dp[j] = min(dp[j], c);
            }
        }
    }

    fout << dp[w];

    return 0;
}