Cod sursa(job #1416455)

Utilizator dinuandAndrei-Mario Dinu dinuand Data 8 aprilie 2015 08:16:01
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <limits>
#include <algorithm>

#define Inf 0x3f3f3f3f

typedef struct generator {
    int energy;
    int cost;
} generator;

int main()
{
    std::ifstream in("energii.in");
    std::ofstream out("energii.out");

    int G, W;
    in >> G >> W;
    std::vector<generator> gens(G + 1);
    for (auto i = 1; i <= G; i++)
        in >> gens[i].energy >> gens[i].cost;

    std::vector<std::vector<int> > dp(G + 1, std::vector<int>(W + 1, Inf));
    for (auto i = 1; i <= G; i++)
        dp[i][0] = 0;

    for (auto i = 1; i <= G; i++)
        for (auto j = 1; j <= W; j++) {
            
            if (j < gens[i].energy) {
                dp[i][j] = std::min(dp[i - 1][j], gens[i].cost);
            } else {
                dp[i][j] = dp[i - 1][j];
                dp[i][j] = std::min(dp[i - 1][j - gens[i].energy] + gens[i].cost
                                , dp[i][j]);
            }
        }

    if (dp[G][W] != Inf)
        out << dp[G][W] << '\n';
    else out << -1 << '\n';

    return 0;
}