Cod sursa(job #2357323)

Utilizator AlexTudorAlex Brinza AlexTudor Data 27 februarie 2019 11:53:10
Problema Energii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("energii.in");
ofstream fout("energii.out");

const int INF = (1 << 30);
const int NMAX=10005;

int sumag,sumap;
int g[1005],p[1005],c[10005];
int G,W;

void read()
{
    fin>>G>>W;

    for(int i=1;i<=G;++i)
    {
        fin>>g[i]>>p[i];
        sumag+=g[i];
        sumap+=p[i];
    }
}

void solve()
{
    if(sumag<W) {fout<<-1; return;}
    if(sumag==W) {fout<<sumap; return;}

    for(int i=1;i<=NMAX;++i) c[i]=INF;

    for(int i=1;i<=G;++i)
    {
        for(int j=NMAX-g[i];j>=0;--j)
            if(c[j+g[i]]>c[j]+p[i])
                {
                 c[j+g[i]]=c[j]+p[i];
                }
    }

    int minim=INF;

    for(int i=W;i<=NMAX;++i) if(c[i]<minim) minim=c[i];

    fout<<minim;

}

int main()
{
    read();
    solve();
    return 0;
}