Cod sursa(job #1672208)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 2 aprilie 2016 14:24:53
Problema Energii Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
#include <cstdio>
#define NM 1005
#define VAL 10000005

using namespace std;

int N, G, i, mn;
int c[NM], e[NM];
int dp[VAL], s, j;
bool ok[VAL];

int main()
{
    freopen("energii.in", "r", stdin);
    freopen("energii.out", "w", stdout);
    mn=2000000000;
    ok[0]=true;
    scanf("%d %d", &G, &N);
    for (i=1; i<=G; i++)
    {
        scanf("%d %d", &e[i], &c[i]);
        s+=e[i];
    }
    if (s<N)
      printf("%d\n", -1);
    else
    {
        for (i=1; i<=G; i++)
        {
            for (j=s-e[i]; j>=0; j--)
            {
                if (ok[j]==true)
                {
                    ok[j+e[i]]=true;
                    if (dp[j+e[i]]==0)
                      dp[j+e[i]]=dp[j]+c[i];
                    else
                      dp[j+e[i]]=min(dp[j]+c[i], dp[j+e[i]]);
                    if (j+e[i]>=N)
                      mn=min(mn, dp[j+e[i]]);
                }
            }
        }
        printf("%d\n", mn);
    }
    return 0;
}