Pagini recente » Cod sursa (job #1280210) | Cod sursa (job #249910) | Cod sursa (job #1158929) | Cod sursa (job #451072) | Cod sursa (job #1164156)
#include <fstream>
#include <vector>
#define in "energii.in"
#define out "energii.out"
#define Max_E 10000
#define oo 100000000
typedef std :: pair < int , int > CENTRALE;
std :: ifstream f(in);
std :: ofstream g(out);
class Energii {
public :
bool Is_It_Valid(std :: vector < CENTRALE >, int );
int Solve(std :: vector < CENTRALE > , int);
};
bool Energii :: Is_It_Valid(std :: vector < CENTRALE > V, int W) {
int sum = 0;
for(int i = 0;i < V.size(); ++i) sum += V[i].first;
if(sum < W) return 0;
return 1;
}
int Energii :: Solve(std :: vector < CENTRALE > V, int W) {
std :: vector < int > DP(Max_E + W + 1, oo);
DP[0] = 0;
int best_sol = oo;
for(int i = 0; i < V.size(); ++i)
for(int j = W; j >= 0; --j)
if(DP[j] != -1 && DP[j + V[i].first] > DP[j] + V[i].second)
DP[j + V[i].first] = DP[j] + V[i].second;
for(int i = W; i < DP.size(); ++i)
if(DP[i] != oo && DP[i] < best_sol) best_sol = DP[i];
return best_sol;
}
int main() {
int N, G;
f >> N >> G;
std :: vector < CENTRALE > V(N);
for(int i = 0; i < N; ++i) f >> V[i].first >> V[i].second;
Energii obj;
if(!obj.Is_It_Valid(V, G)) g << "-1\n";
else g << obj.Solve(V, G) << '\n';
}