Cod sursa(job #2840718)

Utilizator mihhTURCU MIHNEA ALEXANDRU mihh Data 28 ianuarie 2022 17:41:51
Problema Subsir Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <bits/stdc++.h>
using namespace std;

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

#define ll int

const ll INF=1e9;

int main(){
    int n,w;
    fin>>n>>w;
    ll ans=INF;
    vector<int> eg(n+1, 0), ec(n+1,0);
    for(int i=1;i<=n;++i){
        fin>>eg[i]>>ec[i];
        if(eg[i]>=w){
            ans=min((ll)ec[i], ans);
            --i;
            --n;
        }
        // eg[i]
    }
    vector<vector<ll>> dp(2, vector<ll>(2*w+1, INF));
    dp[0][0]=0;
    bool u=0;
    for(int i=1;i<=n;++i){
        u=!u;
        dp[u][0]=0;
        for(int e=1;e<=2*w;++e){
            dp[u][e]=min(dp[u][e], dp[!u][e]);
            int energy=min(w,eg[i]);
            if(e>=energy)
                dp[u][e]=min(dp[u][e], dp[!u][e-energy]+ec[i]);
        }
    }
    for(int i=w;i<=w*2;++i)
        ans=min(ans,dp[u][i]);
    fout<<(ans>=INF?-1:ans);
}