Cod sursa(job #1666572)

Utilizator EberardoVladianu Cosmin Eberardo Data 28 martie 2016 09:32:35
Problema Energii Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>

using namespace std;

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

int a[1003][20005];
int g,w;
int energie[1003],cost[1003];
int nr;
int val_ceruta=-1;

int maxim(int a, int b)
{
    if(a>b)
        return a;
    return b;
}

void citire()
{
    int i;
    fin>>g>>w;
    nr=4*w+5;

    for(i=1;i<=g;i++)
        fin>>energie[i]>>cost[i];
}

void dinamica()
{
    int i,j;

    for(i=1;i<g;i++)
    {
        for(j=1;j<cost[i];j++)
            a[i][j]=a[i-1][j];
        for(j;j<=20002;j++)
        {
            a[i][j]=maxim(a[i-1][j],energie[i]+a[i-1][j-cost[i]]);
        }
    }
    for(j=1;j<cost[i];j++)
            {
                a[i][j]=a[i-1][j];
                if(a[i][j]>=w)
                {
                    val_ceruta=j;
                    return;
                }
            }
        for(j;j<=nr;j++)
        {
            a[i][j]=maxim(a[i-1][j],energie[i]+a[i-1][j-cost[i]]);
            if(a[i][j]>=w)
                {
                    val_ceruta=j;
                    return;
                }
        }
}

int main()
{
    citire();
    dinamica();
    fout<<val_ceruta;
    return 0;
}