Pagini recente » Cod sursa (job #549193) | Cod sursa (job #57480) | Cod sursa (job #675340) | Cod sursa (job #654802) | Cod sursa (job #2272404)
#include <bits/stdc++.h>
using namespace std;
ifstream in("energii.in");
ofstream out("energii.out");
const int inf = 1e9;
int DP[2][1000010];
int main() {
ios::sync_with_stdio(false); in.tie(0); out.tie(0);
int n, W; in >> n >> W;
vector< pair< int, int > > centrale(n + 1);
int maxSum = 0;
for(int i = 1; i <= n; ++i) {
in >> centrale[i].first >> centrale[i].second;
maxSum += centrale[i].first;
}
if(maxSum < W) {
out << "-1\n";
exit(0);
}
for(int i = 0; i < 2; ++i) {
for(int j = 0; j <= maxSum + 2; ++j) {
DP[i][j] = inf;
}
}
for(int i = 1; i <= n; ++i) {
for(int j = 0; j <= centrale[i].first; ++j) {
DP[i % 2][j] = min(centrale[i].second, DP[abs(i % 2 - 1)][j]);
}
for(int j = centrale[i].first + 1; j <= maxSum; ++j) {
DP[i % 2][j] = min(DP[abs(i % 2 - 1)][j], centrale[i].second + DP[abs(i % 2 - 1)][j - centrale[i].first]);
}
}
for(int j = W; j <= maxSum; ++j) {
if(DP[n % 2][j] != inf) {
out << DP[n % 2][j] << "\n";
break;
}
}
in.close(); out.close();
return 0;
}