Cod sursa(job #2272595)

Utilizator andreiomd1Onut Andrei andreiomd1 Data 30 octombrie 2018 13:15:53
Problema Energii Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <bits/stdc++.h>

using namespace std;

const int WMAX=1e7+5;

int G, W, i, j, E, C;

bitset <WMAX> H;

int sum=0;

int ans=INT_MAX;

bool ok=false;

int sol[WMAX];

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

    H[0]=1;

    scanf("%d%d", &G, &W);

    for(i=1; i<=G; i++)
    {
        scanf("%d%d", &E, &C);

        for(j=min(W-E, sum); j>=0; j--)
            if(H[j])
            {
                if(H[j+E]==1)
                    sol[j+E]=min(sol[j+E], sol[j]+C);
                else sol[j+E]=sol[j]+C;

                H.set(j+E);
            }

        sum+=E;
    }

    for(i=W; i<=sum; i++)
        if(H[i]==1)
        {
            ans=min(ans, sol[i]);

            ok=true;
        }

    if(ok)
        printf("%d\n", ans);
    else printf("%d\n", -1);

    return 0;
}