Cod sursa(job #1335541)

Utilizator BlueStrutAndrei Prahoveanu BlueStrut Data 5 februarie 2015 17:46:25
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<cstdio>
using namespace std;
int i, cost[30002], vmax, prod[30002], a[30002], n, eg, costmn, j;
bool ok[30002];
int min(int a, int b){if (a<=b) return a; else return b;}
int main(){
    freopen("energii.in","r",stdin);
    freopen("energii.out","w",stdout);
    scanf("%d%d", &n, &eg);
    for (i=1;i<=n;i++) scanf("%d%d", &prod[i], &cost[i]);
    vmax=0; ok[0]=true; a[0]=0; costmn=999999999;
    for (i=1;i<=2*n+2;i++) a[i]=999999999;
    for (i=1;i<=n;i++) for (j=vmax;j>=0;j--) if (ok[j]==true) {
        if (j+prod[i]>=eg) {
            if (costmn>a[j]+cost[i]) costmn=a[j]+cost[i];
        } else {
            ok[j+prod[i]]=true;
            if (vmax<j+prod[i]) vmax=min(j+prod[i], eg);
            a[j+prod[i]]=min(a[j]+cost[i], a[j+prod[i]]);
        }
    }
    if (costmn==999999999) printf("-1\n"); else printf("%d\n", costmn);
    return 0;
}