Cod sursa(job #881052)

Utilizator otto1Palaga Vicentiu-Octavian otto1 Data 17 februarie 2013 17:46:15
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<iomanip.h>
#include<fstream.h>

ifstream fin("energii.in");
ofstream fout("energii.out");
long c[1001] , e[1001];
#define INF 6000000

long a[1001][5001] , i , j ,w,g;

int main()
{
    fin>>g;
    fin>>w;
    for (i = 1 ; i<= g ; i++)
        fin>> e[i]>>c[i];


    for (i = 1 ; i<= w;i++)
    {
        if(i <= e[1])
        {
             a[1][i] = c[1];
        }
    }
    for (i = 1 ; i<= g;i++)
    {
        for (j = 1 ; j<= w ; j++)
        {
            if (!a[i][j]) a[i][j] = INF;

        }

    }
    for (i = 2 ; i<= g ; i++)
    {
        for (j = 1 ; j<= w;j++)
        {
            if (j<= e[i])
            {
                    if (a[i-1][j] < c[i])
                       a[i][j] = a[i-1][j];
                    else
                       a[i][j] = c[i];
            }
            else
            {

                    if ( (j-e[i]>=1)&&a[i-1][j] > c[i] + a[i-1][j-e[i]] )
                       a[i][j] = c[i] + a[i-1][j-e[i]];
                    else
                       a[i][j] = a[i-1][j];
            }
        }
    }

    if (a[g][w]==INF)
       fout<<-1;
    else
        fout<<a[g][w];




    return 0;
}