Cod sursa(job #2970553)

Utilizator LucaMuresanMuresan Luca Valentin LucaMuresan Data 25 ianuarie 2023 15:20:36
Problema Energii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <bits/stdc++.h>

using namespace std;

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

int dp[2][10001]; /// dp[n][m] = costul minim ca sa obtinem pentru 1..n costul m

int main()
{
    int n;
    in >> n;

    int W;
    in >> W;

    for (int i=0; i<2; i++)
        for (int j=0; j<10001; j++)
            dp[i][j] = 1e9;

    dp[0][0] = 0;

    for (int i=1; i<=n; i++)
    {
        int w, c;
        in >> w >> c;

        bool cur = (i & 1), prv = (cur ^ 1);
        for (int i=10000; i>=0; i--)
            dp[cur][i] = dp[prv][i];

        for (int i=10000; i>=w; i--)
            dp[cur][i] = min(dp[cur][i], dp[prv][i-w] + c);
    }

    bool cur = (n & 1);

    int ans = 1e9;

    for (int i=W; i<10001; i++)
        ans = min(ans, dp[cur][i]);

    if (ans == 1e9)
        ans = -1;
    out << ans;

    return 0;
}