Pagini recente » Cod sursa (job #1022249) | Cod sursa (job #1280231) | Cod sursa (job #2246706) | Cod sursa (job #3148518) | Cod sursa (job #333567)
Cod sursa(job #333567)
#include <fstream>
#define MaxG 1001
#define MaxW 5001
using namespace std;
fstream fin ("energii.in", ios::in);
fstream fout("energii.out", ios::out);
int g, w, m[3][MaxG];
int A[MaxW], minim;
bool uz[MaxW][MaxG];
int temp_uz;
int main(){
fin>>g;
fin>>w;
for (int i = 1; i <= g; ++ i)
fin >> m[1][i] >> m[2][i];
A[0] = 0;
for (int i = 1; i <= w; ++ i){
temp_uz = 0;
for (int j = 1; j <= g; ++ j){
if (A[i] != 0 && m[1][j] <= i && A[i] > A[ i - m[1][j] ] + m[2][j] && uz[ i - m[1][j] ][ j ] == false){
temp_uz = j;
A[i] = A[ i - m[1][j] ] + m[2][j];
}
else if (m[1][j] == i){
A[i] = m[2][j];
temp_uz = j;
}
else if (m[1][j] < i && A[i - m[1][j]] != 0 && uz[ i - m[1][j] ][ j ] == false) {
A[i] = A[i - m[1][j] ] + m[2][j];
temp_uz = j;
};
};
if (temp_uz != 0 && m[1][temp_uz] != i)
for (int j = 1; j <= g; ++ j)
uz[i][j] = uz[i - temp_uz][j];
if (temp_uz != 0) uz[i][temp_uz] = true;
};
if (A[w] == 0)
fout<<"-1";
else fout<<A[w];
};