Cod sursa(job #963690)

Utilizator danlexDan Alexandru danlex Data 18 iunie 2013 01:04:56
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#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;
}