Cod sursa(job #1416257)

Utilizator antanaAntonia Boca antana Data 7 aprilie 2015 19:20:23
Problema Energii Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <cstdio>
#define MAX 300000
using namespace std;
struct generatoare{int e, c;};
generatoare v[5001];
int s[20001];
int minis(int a, int b)
{
    if(a>b)
        return b;
    return a;
}
int main()
{
    freopen("energii.in", "r", stdin);
    freopen("energii.out", "w", stdout);
    int n, i, j, G, mini=MAX, maxi=-1;
    scanf("%d%d", &n, &G);
    for(i=1;i<=n;i++){
        scanf("%d%d", &v[i].e, &v[i].c);
        if(maxi<v[i].e)
            maxi=v[i].e;
    }
    for(i=1;i<=n;i++)
    {
        for(j=20000;j>=1;j--)
            if(s[j]!=0)
                if(j+v[i].e<=20000)
                {
                    if(s[j+v[i].e]!=0)
                        s[j+v[i].e]=minis(s[j+v[i].e], s[j]+v[i].c);
                    else s[j+v[i].e]=s[j]+v[i].c;
                }
        if(s[v[i].e]==0)
            s[v[i].e]=v[i].c;
        else s[v[i].e]=minis(s[v[i].e], v[i].c);
    }
    for(i=G;i<=20000;i++)
        if(s[i]!=0)
            if(mini>s[i])
                mini=s[i];
    if(mini==MAX)
        printf("-1");
    else printf("%d", mini);

    return 0;
}