Cod sursa(job #1888725)

Utilizator andreigasparoviciAndrei Gasparovici andreigasparovici Data 22 februarie 2017 12:15:13
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<cstdio>

using namespace std;

#define INF (1<<30)

int G, w;
int suma;
struct obiect{
    int p, c;
}ob[5010];

int a[1010][5010];

int main()
{
    freopen("energii.in","r",stdin);
    freopen("energii.out","w",stdout);


    scanf("%d %d ",&G,&w);
    for(int i=1; i<=G; i++)
    {
        scanf("%d %d ",&ob[i].p,&ob[i].c);
        suma+=ob[i].p;
    }
    if(suma<w)
    {
        puts("-1");
    }
    else
    {
        for(int i=0; i<=G; i++)
            for(int j=0; j<=w; j++)
                a[i][j] = INF;

        for(int i=1; i<=G; i++)
        {
            for(int j=0; j<=w; j++)
            {
                if(j<=ob[i].p)
                    a[i][j] = (a[i-1][j]<ob[i].c)?a[i-1][j]:ob[i].c;
                if(j>ob[i].p)
                    a[i][j] = (a[i-1][j]<a[i-1][j-ob[i].p] + ob[i].c)?a[i-1][j]:a[i-1][j-ob[i].p] + ob[i].c;
            }
        }

        printf("%d\n",a[G][w]);
    }



    return 0;
}