Cod sursa(job #1597131)

Utilizator mihai.constantinConstantin Mihai mihai.constantin Data 11 februarie 2016 18:23:40
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream in("energii.in");
ofstream out("energii.out");

const int dmax = 1002;
const int W_max = 5002;

int e[dmax];
int c[dmax];

int cost[W_max];
/*
    cost[i] == COSTUL MINIM NECESAR PRODUCERII ENERGIEI i, i < W
    cost[W] == COSTUL MINIM NECESAR PENTRU A PRODUCE ENERGIE >= W
*/

int N, W;

int main()
{
    int i, j, S = 0;

    in >> N; // NR GENERATOARE
    in >> W; //ENERGIE NECESARA REPORNIRII CENTRALEI

    for(i = 1; i <= N; i++)
    {
        in >> e[i] >> c[i];

        S += e[i];
    }

    if(S < W) out << -1;
    else
    {
        for(i = 1; i <= W; i++) cost[i] = -1;

        cost[0] = 0;

        for(i = 1; i <= N; i++)
            for(j = W + e[i]; j >= e[i]; j--)
                if( cost[j - e[i]] != -1)
                {
                    if(j < W)
                    {
                        if( cost[j] > cost[j - e[i]] + c[i] || cost[j] == -1) cost[j] = cost[j - e[i]] + c[i];
                    }
                    else
                        if(cost[W] > cost[j - e[i]] + c[i] || cost[W] == -1) cost[W] = cost[ j - e[i] ] + c[i];
                }

        out << cost[W];
    }

    return 0;
}