Cod sursa(job #2272604)

Utilizator andreiomd1Onut Andrei andreiomd1 Data 30 octombrie 2018 13:38:46
Problema Energii Scor 45
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.69 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=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;

}