Cod sursa(job #1874511)

Utilizator Dragne.Andrei11Dragne Andrei Dragne.Andrei11 Data 10 februarie 2017 02:22:28
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>
#define nmax 1005
#define nmax1 100000

using namespace std;

struct numere
{
    int energie;
    int cost;
}num[nmax];
int g, p;
int raspuns;
int s;

int din[nmax][5*nmax];

void citire()
{
    scanf("%d%d", &g, &p);
    for(int i=1;i<=g;i++)
    {
        int x, y;
        scanf("%d%d", &x, &y);
        num[i].energie=x;
        num[i].cost=y;
        s+=num[i].energie;
    }
}
void rezolvare()
{
    for(int i=0;i<=g;i++)
        for(int j=0;j<=p;j++)
            din[i][j]=nmax1;
    for(int i=1;i<=g;i++)
    {
        for(int j=0;j<=p;j++)
        {
            din[i][j]=min(din[i-1][j], num[i].cost);
            if(num[i].energie<j)
                din[i][j]=min(din[i-1][j], din[i-1][j-num[i].energie]+num[i].cost);
        }
    }
}
void afisare()
{
    raspuns=din[g][p];
    printf("%d", raspuns);
}

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

    citire();
    if(s<p)
    {
        printf("-1\n");
        return 0;
    }
    rezolvare();
    afisare();

    return 0;
}