Pagini recente » Cod sursa (job #88501) | Cod sursa (job #1182757) | Cod sursa (job #2269758) | Cod sursa (job #2309370) | Cod sursa (job #2892732)
#include <bits/stdc++.h>
#define NMAX 1000
#define WMAX 5000
#define INF ((int)1e9)
using namespace std;
ifstream fin("energii.in");
ofstream fout("energii.out");
struct obj_info {
int energy;
int cost;
};
int n, w;
obj_info v[NMAX + 1];
int dp[NMAX + 1][WMAX + 1];
int main(void) {
fin >> n >> w;
for (int i = 1; i <= n; ++i) {
int e, c;
fin >> e >> c;
v[i] = {e, c};
}
for (int i = 0; i <= n; ++i) {
for (int j = 1; j <= w; ++j) {
dp[i][j] = INF;
}
}
for (int i = 0; i <= n; ++i) {
dp[i][0] = 0;
}
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= w; ++j) {
int prev_cost;
if (j - v[i].energy < 0) {
prev_cost = v[i].cost;
} else {
prev_cost = dp[i - 1][j - v[i].energy] + v[i].cost;
}
dp[i][j] = min(dp[i - 1][j], prev_cost);
if (dp[i][j] == INF) {
break;
}
}
}
fout << (dp[n][w] == INF ? -1 : dp[n][w]) << "\n";
return 0;
}