Pagini recente » Cod sursa (job #186477) | Cod sursa (job #995021) | Cod sursa (job #2951961) | Cod sursa (job #1240099) | Cod sursa (job #333580)
Cod sursa(job #333580)
#include <fstream>
#define MaxG 1001
#define MaxW 1000001
using namespace std;
fstream fin ("energii.in", ios::in);
fstream fout("energii.out", ios::out);
int g, w, m[3][MaxG],maxim, poz_x;
int A[MaxW], minim;
bool uz[MaxW][MaxG];
int temp_uz;
int main(){
fin>>g;
fin>>w;
maxim = 0;
for (int i = 1; i <= g; ++ i){
fin >> m[1][i] >> m[2][i];
maxim += m[1][i];
};
A[0] = 0;
for (int i = 1; i <= maxim; ++ 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 ((A[i] == 0 || A[i] > m[2][j]) && m[1][j] == i){
A[i] = m[2][j];
temp_uz = j;
}
else if (A == 0 && 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;
};
minim = 1999999999;
for (int i = w; i <= maxim; ++ i)
if (A[i] < minim && A[i] != 0){
minim = A[i];
};
if (minim == 1999999999)
fout<<-1;
else fout<<minim;
};