Cod sursa(job #2201408)

Utilizator Hidden.bdBurlacu Doru Hidden.bd Data 4 mai 2018 17:45:25
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include<fstream>
#include<iostream>
#include<cmath>
#include<iomanip>

using namespace std;

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

//#define fin cin
//#define fout cout

int dp[1002][10002];

int main(){
    
    int generatoare, necesar, cost[1002], energie[1002];
    
    fin >> generatoare >> necesar;
    
    for( int i = 1 ; i <= generatoare ; ++i ){
        fin >> energie[i] >> cost[i];
    }
    //dp[1][2] = 4;
    for( int i = 1 ; i <= generatoare ; ++i ){
        for( int cw = 0 ; cw <= necesar ; ++cw ){
            
            dp[i][cw] = dp[i-1][cw];
            
            if( energie[i] <= cw ){
                if( dp[i][cw] ) dp[i][cw] = min(dp[i][cw], dp[i-1][cw-energie[i]] + cost[i]);
                else if ( !dp[i][cw] && !dp[i-1][cw-energie[i]] ){
                    if( energie[i] == cw ) dp[i][cw] = cost[i];
                    else dp[i][cw] = 0;
                }
                else if ( dp[i][cw] && !dp[i-1][cw-energie[i]] ) continue;
                else dp[i][cw] = dp[i-1][cw-energie[i]] + cost[i];
                //if( i == 1 && cw == 2 ) cout << dp[i][cw];
            }
        }
    }
    
    if( dp[generatoare][necesar] == 0 ) fout << -1;
    else fout << dp[generatoare][necesar];
    
    return 0;
}