Pagini recente » Cod sursa (job #2449669) | Cod sursa (job #806120) | Cod sursa (job #3158479) | Cod sursa (job #1043423) | Cod sursa (job #1336537)
#include <fstream>
using namespace std;
int G, W, E[1003], C[1003], DP[2][10010], h, N, max = 0;
bool u = true;
ifstream fin("energii.in");
ofstream fout("energii.out");
int min(int a, int b){
if (a == 0) return b;
else if (b == 0) return a;
else if (a > b) return b; else return a;
}
int energii(){
fin >> G >> W;
for (int i = 1; i <= G; i++){
fin >> E[i] >> C[i];
max = max + E[i];
}
if (max < W) return 0;
for (int i = 1; i <= G; i++){
h += E[i];
if (h < W) N = h; else N = W;
for (int j = 1; j <= N; j++){
if (E[i] < j){
DP[u][j] = min(DP[!u][j - E[i]] + C[i], DP[!u][j]);
}
else if (DP[!u][j] == 0) DP[u][j] = C[i];
else DP[u][j] = min(C[i], DP[!u][j]);
}
u = !u;
}
return DP[!u][W];
}
int main(){
if (energii() == 0) fout << -1; else fout << DP[!u][W];
return 0;
}