Pagini recente » Cod sursa (job #1806989) | Cod sursa (job #652444) | Cod sursa (job #2181767) | Cod sursa (job #2255946) | Cod sursa (job #2201408)
#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;
}