Pagini recente » Cod sursa (job #1584506) | Cod sursa (job #842245) | Cod sursa (job #1429357) | Cod sursa (job #2403422) | Cod sursa (job #2527015)
#include <fstream>
#include <limits.h>
using namespace std;
ifstream f("energii.in");
ofstream g("energii.out");
int G, W;
long long sum, res[5004];
struct s {
long long e, c;
} v[1004];
long long solve(int i) {
if(i==G)
return min(res[W-v[i].e]+v[i].c, res[W]);
for(int j=W;j>=1;j--)
if(v[i].e<j && res[j-v[i].e]!=LLONG_MAX)
res[j]=min(res[j-v[i].e]+v[i].c, res[j]);
else if(v[i].e>=j)
res[j]=min(res[j], v[i].c);
solve(i+1);
}
int main() {
f>>G>>W;
for(int i=1;i<=G;i++) {
f>>v[i].e>>v[i].c;
sum+=v[i].e;
}
if(sum<W)
g<<-1;
else {
for(int i=1;i<=W;i++)
res[i]=LLONG_MAX;
g<<solve(1);
}
f.close();
g.close();
return 0;
}