Cod sursa(job #2367054)

Utilizator trifangrobertRobert Trifan trifangrobert Data 5 martie 2019 02:02:14
Problema Energii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <cstring>

using namespace std;

const int GMAX = 1005;
const int WMAX = 6005;
const int INF = (1 << 30);
int g, w;
int dp[GMAX][WMAX];
int cost[GMAX], cant[GMAX];

int main()
{
    ifstream fin("energii.in");
    ofstream fout("energii.out");
    fin >> g >> w;
    for (int i = 1;i <= g;++i)
        fin >> cant[i] >> cost[i];
    int sw = w;
    w += 1000;
    for (int i = 1;i <= g;++i)
        for (int j = 1;j <= w;++j)
            dp[i][j] = INF;
    dp[1][cant[1]] = cost[1];
    for (int i = 2;i <= g;++i)
        for (int j = 1;j <= w;++j)
            {
                dp[i][j] = dp[i - 1][j];
                if (cant[i] <= j)
                    dp[i][j] = min(dp[i][j], dp[i - 1][j - cant[i]] + cost[i]);
            }
    int ans = INF;
    for (int j = sw;j <= w;++j)
        ans = min(ans, dp[g][j]);
    if (ans != INF)
        fout << ans << "\n";
    else
        fout << -1 << "\n";
    fin.close();
    fout.close();
    return 0;
}