Pagini recente » Cod sursa (job #2047645) | Cod sursa (job #1756053) | Cod sursa (job #2140964) | Cod sursa (job #1922840) | Cod sursa (job #2932331)
#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};
}
dp[1] = v[1];
for(int i = 2; 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].second > temp.second)
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;
}
}
}
int ans = 2e9;
for(int i = 1; i <= n; i++)
if(dp[i].first >= m)
ans = min(ans, dp[i].second);
cout << ans;
return 0;
}