Cod sursa(job #1773544)

Utilizator dragomir_ioanDragomir Ioan dragomir_ioan Data 7 octombrie 2016 22:27:44
Problema Energii Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<cstdio>
using namespace std;

#define MAX(a,b) (a>b?a:b)

struct g {
    int val, cost;
} v[1001];

int din[5001];

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

    int n, t;
    scanf("%d%d", &n, &t);

    int total=0;

    for(int i=1; i<=n; i++)
        scanf("%d%d", &v[i].val, &v[i].cost), total+=v[i].val;

    if(total < t) {
        printf("-1\n");
        return 0;
    }

    for(int i=1; i<=5000; i++) din[i] = -100000000;

    for(int i=1; i<=n; i++)
        for(int j=5000; j>=v[i].cost; j--)
            din[j] = MAX(din[j-v[i].cost] + v[i].val, din[j]);

    /*for(int i=1; i<=5000; i++)
        if(din[i]>=0) printf("en: %d; cost: %d\n", din[i], i);
*/
    for(int i=1; i<=5000; i++)
        if(din[i]>=t) {
            printf("%d\n", i);
            return 0;
        }

    return 0;
}