Cod sursa(job #962561)

Utilizator danlexDan Alexandru danlex Data 15 iunie 2013 14:17:35
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <iostream>
#include <fstream>
using namespace std;

int n, W, w[1001], c[1001], f[5001], g[5001], minCost;

void read(){
    ifstream f("energii.in");
    f >> n;
    f >> W;

    for (int i = 0; i < n; i++){
        f >> w[i];
        f >> c[i];
    }

    f.close();
}

void write(){
    ofstream of("energii.out");
    of << minCost;
    of.close();

}

int knapsack(){
    f[0] = 0; g[0] = true;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < W; j ++)
            if (g[j]) {
                g[j + w[i]] = true;
                if (f[j + w[i]] == 0 || f[j + w[i]] > f[j] + c[i])
                    f[j + w[i]]=f[j] + c[i];
            }

    if (g[W]) return f[W];
    else return -1;
}

int main(){
    read();

    minCost = knapsack();

    write();
    return 0;
}