Cod sursa(job #2272597)

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

using namespace std;

const int WMAX=1e7+5;

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

bitset <WMAX> H;

long long sum=0;

int ans=INT_MAX;

long long sol[WMAX];

long long min (long long A, long long B)
{
    if(A<=B)
        return A;
    else return B;
}

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;
    }

    if(sum>=W)
    {

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

        printf("%d\n", ans);
    }

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

    return 0;
}