Pagini recente » Cod sursa (job #393856) | Istoria paginii utilizator/matei8787 | Istoria paginii utilizator/warangel | Istoria paginii problema/egyptfrac | Cod sursa (job #202192)
Cod sursa(job #202192)
#include<fstream>
#include<iostream>
using namespace std;
#define inf 10000001
int g;
int w;
int e[1001];
int c[1001];
int costuri[10000001];
int add(int a, int b)
{
if(a == inf || b == inf)
return inf;
return a+b;
}
int main(void)
{
freopen("energii.in", "r", stdin);
freopen("energii.out", "w", stdout);
cin >> g;
cin >> w;
long max = 0;
for(int i=0;i<g;++i)
{
cin >> e[i] >> c[i];
max += e[i];
}
costuri[0] = 0;
for(long i = 1; i<=max; ++i)
costuri[i] = inf;
long min = inf;
for(int j=0;j<g;++j)
{
for(long i = max; i>=1; --i)
{
if(i >= e[j])
{
long sum = (costuri[i-e[j]] == inf)?inf:costuri[i-e[j]]+c[j];
if(costuri[i] > sum)
{
costuri[i] = sum;
if(i>=w)
{
if(costuri[i] < min)
min = costuri[i];
}
}
}
}
}
if(min == inf)
cout << -1 << endl;
else
cout << min << endl;
return 0;
}