Cod sursa(job #2927267)

Utilizator Samoila_AlexandruSamoilaAlexandru Samoila_Alexandru Data 19 octombrie 2022 20:46:11
Problema Energii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#define inf 0x3f3f3f3f

using namespace std;

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

struct generator
{
    int energie, cost;
} v[1001];

int G, W, dp[15001];

int main()
{
    fin>>G>>W;
    for(int i=1; i<=G; i++)
        fin>>v[i].energie>>v[i].cost;
    fin.close();

    for(int i=1; i<=15001; i++)
        dp[i]=inf;

    //dp[i] => costul minim pentru repornirea unor generatoare care sa produca o cantitate >=i de energie

    for(int i=1; i<=G; i++)
        for(int j=W; j>=0; j--)
    {
        if(v[i].energie<j)//daca generatorul i produce insuficient curent pentru repornirea centralei
            dp[j]=min(dp[j], dp[j-v[i].energie]+v[i].cost);//luam in considerare costul pentru reparatia sa
        else dp[j]=min(dp[j], v[i].cost);//daca produce suficient curent inseamna ca avem nevoie doar de generatorul i
    }

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

    fout.close();

    return 0;
}