Pagini recente » Cod sursa (job #12062) | Cod sursa (job #245829) | Cod sursa (job #1515631) | Cod sursa (job #1804244) | Cod sursa (job #880508)
Cod sursa(job #880508)
#include <iostream>
#include <fstream>
using namespace std;
#define Nmax 30002
int G, W, S;
int E[Nmax], C[Nmax], cost[Nmax];
bool format[Nmax];
int minim = Nmax*Nmax;
void citire(){
ifstream f("energii.in");
f >> G >> W;
for(int i = 1; i <= G; i++)
f >> E[i] >> C[i],
S += E[i];
f.close();
}
void dinamica(){
int maxim = 0, poz;
format[0] = 1;
for(int i = 1; i <= G; i++){
for(int j = maxim; j >= 0; j--)
if(format[j]){
format[j+E[i]] = 1;
if(cost[j] + C[i] < cost[j+E[i]] || cost[j+E[i]] == 0)
cost[j+E[i]] = cost[j] + C[i];
if(j+E[i] >= W && cost[j+E[i]] < minim)
minim = cost[j+E[i]],
poz = j+E[i];
}
if(cost[maxim] + C[i] < minim)
maxim += E[i];
}
}
void afis(){
ofstream g("energii.out");
if(W > S)
g << -1;
else
g << (minim == Nmax*Nmax ? -1 : minim) << "\n";
}
int main(){
citire();
dinamica();
afis();
return 0;
}