Cod sursa(job #3263948)

Utilizator PsyDuck1914Feraru Rares-Serban PsyDuck1914 Data 17 decembrie 2024 11:26:44
Problema Energii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 1e3;
const int WMAX = 10005;
const int INF = 0x3f3f3f3f;


int dp[2][WMAX];

int main()
{
    
    for(int i=0; i<=1; i++)
        for(int j=0; j<=WMAX; j++)
            dp[i][j] = INF;
            
    int n, w;
    f >> n >> w;
    

    dp[0][0] = 0;
    
    for (int i = 1; i <= n; i++)
    {
        int eg, cg;
        f >> eg >> cg;
        
        for (int j = 10001; j >= 0; j--)
        {
            
            if (j >= eg)
            {
                dp[i % 2][j] = min(dp[(i + 1) % 2][j], dp[(i + 1) % 2][j - eg] + cg);
            }
            else
            {
                dp[i % 2][j] = dp[(i + 1) % 2][j];
            }
            
            dp[i % 2][j] = min(dp[i % 2][j], dp[i % 2][j + 1]);
        }
    }
    
    if(dp[n % 2][w] == INF)
        g << -1;
    
    else g << dp[n % 2][w];

    return 0;
}