Cod sursa(job #22361)

Utilizator rusRus Sergiu rus Data 26 februarie 2007 11:53:00
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
#include <cstring>
using namespace std;

#define MAXG 1001
#define MAXW 5001
#define MAXE 13001

#define INF 10000000

int G, W, eg[MAXG], cg[MAXG], cost1[MAXE], cost2[MAXE];

int main()
{
    ifstream fin("energii.in");
    ofstream fout("energii.out");
    
    int i, j, cmin;

    fin >> G >> W;
    
    for (i = 1; i <= G; i++)
        fin >> eg[i] >> cg[i];
        
    cost1[0] = cost2[0] = 0;
    for (i = 1; i <= MAXE; i++) 
         cost1[i] = cost2[i] = INF;

    for (i = 1; i <= G; i++)
    {
        for (j = 0; j <= MAXE - eg[i]; j++)
            if ( (cost1[j] != INF) && (cost1[j] + cg[i] < cost2[j+eg[i]]) )
                cost2[j+eg[i]] = cost1[j] + cg[i];

        memcpy(cost1, cost2, sizeof(cost1));
    }

    cmin = INF;

    for (i = W; i <= MAXE; i++)
        if (cost1[i] < cmin) cmin = cost1[i];

    if (cmin != INF) fout << cmin << "\n";
        else fout << "-1" << "\n";
        
    fin.close();
    fout.close();
    return 0;
}