Pagini recente » Autentificare | Cod sursa (job #2024090) | Cod sursa (job #2981353) | Cod sursa (job #1894927) | Cod sursa (job #2486585)
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int main()
{
int n, k, mattress[16000];
fin >> n >> k;
//fout << n << ' ' << k << endl;
for (int i = 0; i < n; i++)
{
fin >> mattress[i];
//fout << saltele[i] << endl;
}
int biggestMattress = 0, sumOfMattresses = 0;
for (int i = 0; i < n; i++)
{
if (mattress[i] > biggestMattress)
biggestMattress = mattress[i];
sumOfMattresses += mattress[i];
}
//fout << "biggestMattress=" << biggestMattress<< ' '
// << "sumOfMatresses=" << sumOfMattresses<<endl;
int distribution[16000], sum, volume, solutionFound = 0, transportNo;
distribution[0] = 1; // first mattress in the first transport
int left = biggestMattress, right = sumOfMattresses;
volume = (left + right) / 2;
while (left < right)
{
transportNo = 1;
sum = mattress[0];
//fout<<volume<< ' '<<endl;
for (int i = 1; i < n; i++)
{
if (sum + mattress[i] <= volume)
{
sum += mattress[i];
distribution[i] = transportNo;
}
else
{
transportNo++;
sum = mattress[i];
distribution[i] = transportNo;
}
if (transportNo > k)
{
left = volume + 1;
volume = left + (right - left) / 2;
break;
}
else
{
if (i == n - 1)
{
right = volume - 1;
volume = left + (right - left) / 2;
break;
}
}
}
}
fout << left;
return 0;
}