Cod sursa(job #2002021)

Utilizator stefan_creastaStefan Creasta stefan_creasta Data 18 iulie 2017 13:44:19
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX = 100000;
const int N = 1000005;
int dp[NMAX + 5];

int main()
{
    int n, gg, p, g, i, poz, j, maxim = 0, minim = N;
    freopen("energii.in","r",stdin);
    freopen("energii.out","w",stdout);
    scanf("%d%d", &n, &gg);
    for(i = 1;i <= gg + 10000; ++i) {
        dp[i] = NMAX;
    }
    poz = 0;
    for(i = 1;i <= n; ++i) {
        scanf("%d%d", &p, &g);
        for(j = poz;j >= 0; --j) {
            if(dp[j] != NMAX) {
                if(dp[j] + g < dp[j + p]) {
                    dp[j + p] = dp[j] + g;
                    if(j + p > poz) {
                        poz = j + p;
                    }
                    maxim = max(maxim, j + p);
                }
            }
        }
    }
    for(i = maxim;i >= gg; --i) {
        minim = min(minim, dp[i]);
    }
    if(minim != N) {
        printf("%d\n", minim);
    }
    else {
        printf("-1\n");
    }
    return 0;
}