Pagini recente » Cod sursa (job #1176200) | Cod sursa (job #1435563) | Cod sursa (job #1316769) | Cod sursa (job #1546864) | Cod sursa (job #2932336)
#include <fstream>
using namespace std;
ifstream cin("energii.in");
ofstream cout("energii.out");
const int NMAX = 1e3;
int n, m, s;
pair <int, int> dp[NMAX + 1], v[NMAX + 1];
int main(){
cin >> n >> m;
for(int i = 1; i <= n; i++){
cin >> v[i].first >> v[i].second;
dp[i] = {-2e9, 2e9};
}
for(int i = 1; i <= n; i++){
for(int j = 0; j < i; j++){
pair <int, int> temp;
temp.first = dp[j].first + v[i].first; // energia
temp.second = dp[j].second + v[i].second; // costul
if(temp.first >= m){
// am o energie produsa mai mare sau egala cu cea necesara, deci ma intereseaza costul minim
if(dp[i].first >= m && dp[i].second > temp.second)
dp[i] = temp;
else if(dp[i].first < m)
dp[i] = temp;
}else{
// am o energie produsa mai mica cu cea necesara, deci ma intereseaza o energie cat mai mare cu un cost cat mai mic
if(dp[i].first < temp.first || (dp[i].first == temp.first && dp[i].second > temp.second))
dp[i] = temp;
}
}
//cout << "cu generatoarele din 1..." << i << " pot obtine o energie " << dp[i].first << " la costul " << dp[i].second << "\n";
}
int ans = 2e9;
for(int i = 1; i <= n; i++)
if(dp[i].first >= m)
ans = min(ans, dp[i].second);
if(ans == int(2e9)){
cout << -1;
return 0;
}
cout << ans;
return 0;
}