Pagini recente » Cod sursa (job #2738280) | Cod sursa (job #451584) | Cod sursa (job #2393386) | Cod sursa (job #1955819) | Cod sursa (job #1066485)
#include <fstream>
#include <iostream>
using namespace std;
int main(void)
{
int G; // number of generators
int W; // quantity of energy necessary to start the central
int EG[1000]; // quantity of energy produced by a generator
int CG[1000]; // necessary cost for the production of energy
int sum; // the final cost
int weights[5001], weights2[5001];
int price[5001], price2[5001];
// Read data from the input file
ifstream fin ("energii.in");
fin >> G;
fin >> W;
for(int i = 0; i < G; i++)
{
fin >> EG[i];
fin >> CG[i];
}
fin.close();
for(int i = 0; i < 5001; i++)
{
weights[i] = 0;
weights2[i] = 0;
price[i] = 0;
price2[i] = 0;
}
for(int i = 0; i < G; i++)
{
for(int j = 0; j < 5001; j++)
{
if(weights[j] != 0)
{
if(j + EG[i] < 5001)
{
if(weights[j + EG[i]] == 0)
{
weights2[j + EG[i]] = 1;
price2[j + EG[i]] = price[j] + CG[i];
}
else
{
price2[j + EG[i]] = (price[j] + CG[i] > price[j + EG[i]] ? price[j + EG[i]] : price[j] + CG[i]);
}
}
}
}
if(EG[i] < 5001)
{
if(weights[EG[i]] == 0)
{
weights2[EG[i]] = 1;
price2[EG[i]] = CG[i];
}
else
{
price2[EG[i]] = (price[EG[i]] > CG[i] ? CG[i] : price[EG[i]]);
}
}
for(int j = 0; j < 5001; j++)
weights[j] = weights2[j];
for(int j = 0; j < 5001; j++)
price[j] = price2[j];
}
sum = -1;
for(int i = W; i < 5001; i++)
{
if(weights[i] == 1)
{
sum = price[i];
break;
}
}
FILE *fout;
fout = fopen("energii.out", "w");
fprintf(fout, "%d\n", sum);
fclose(fout);
return 0;
}