Cod sursa(job #1554877)

Utilizator JibrilCernea Bernard Silvestru Jibril Data 21 decembrie 2015 21:22:42
Problema Energii Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <cstdio>

using namespace std;
int cant[10000005], eng[1002], pret[1002];
int main()
{
    int i, j, g, w, min, max;
    freopen("energii.in", "r", stdin);
    freopen("energii.out", "w", stdout);
    scanf("%d%d", &g, &w);
    for(i=0; i<g; i++)
        scanf("%d%d", &eng[i], &pret[i]);

    cant[0]=1;
    max=0;
    min=100000000;
    for(i=0; i<g; i++){
        for(j=max; j>=0; j--){
            if(cant[j] && (cant[j+eng[i]]>pret[i]+cant[j] || cant[j+eng[i]]==0)){
                cant[j+eng[i]]=pret[i]+cant[j];
                if(max<j+eng[i]) max=j+eng[i];
                if(j+eng[i]>=w && cant[j+eng[i]]<min) min=cant[j+eng[i]];
            }
        }
    }
    if(min!=100000000)
        printf("%d", min-1);
        else printf("-1");
    return 0;
}