Pagini recente » Cod sursa (job #533084) | Cod sursa (job #1860891) | Cod sursa (job #1367098) | Cod sursa (job #970748) | Cod sursa (job #963690)
Cod sursa(job #963690)
#include <iostream>
#include <fstream>
using namespace std;
int n, W, w[1005], c[1005], f[1005][5001], minCost, sumCost;
int MAXINT = 2000000000;
void read(){
ifstream f("energii.in");
f >> n;
f >> W;
for (int i = 1; i <= n; i++){
f >> w[i];
f >> c[i];
}
f.close();
}
void write(){
ofstream of("energii.out");
of << minCost;
of.close();
}
int knapsack(){
sumCost = 0;
for (int i = 1; i <=n; i ++){
sumCost += w[i];
}
if (sumCost < W) {
return -1;
}
for (int i = 1; i <=n; i++){
f[i][0] = MAXINT;
}
for (int j = 1; j <= W; j ++){
f[0][j] = MAXINT;
}
for (int i = 1; i <= n; i++){
for (int j = 1; j <= W; j ++){
if(j > w[i]){
f[i][j] = min(f[i-1][j], f[i-1][j-w[i]]+ c[i]);
} else {
f[i][j] = min(f[i-1][j], c[i]);
}
}
}
return f[n][W];
}
int main(){
read();
minCost = knapsack();
write();
return 0;
}