Cod sursa(job #1989637)

Utilizator sydeff90Voicu Stefan sydeff90 Data 8 iunie 2017 12:53:54
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <cstdio>

using namespace std;

struct generator
{
    short int cantitate,cost;
};

generator v[1001];

short int vg[15001];//eficienta de pe pozitia respectiva

int main()
{
    freopen("energii.in","r",stdin);
    //freopen("energii.out","w",stdout);
    int n,necesar,max=0;
    cin>>n>>necesar;
    for (short int i=1;i<=n;i++)
    {
        cin>>v[i].cantitate>>v[i].cost;
        max+=v[i].cantitate;
    }
    if (max<necesar)
    {
        cout<<-1<<endl;
        return 0;
    }
    max=0;
    int j;
    for (short int i=1;i<=n;i++)
    {
        for (j=max;j>=1;j--)
            if (vg[j]!=0)
                if (j+v[i].cost<15000)
                {
                    if (vg[j+v[i].cost]<vg[j]+v[i].cantitate)
                        vg[j+v[i].cost]=vg[j]+v[i].cantitate;
                    if (j+v[i].cost>max)
                        max=j+v[i].cost;
                }
        if (max<v[i].cost)
            max=v[i].cost;
        if (vg[v[i].cost]<v[i].cantitate)
            vg[v[i].cost]=v[i].cantitate;
    }
    short int i=1;
    while (1)
    {
        if (vg[i]>=necesar)
        {
            cout<<i;
            return 0;
        }
        i++;
    }
}