Pagini recente » Cod sursa (job #2900059) | Cod sursa (job #1688669) | Cod sursa (job #2819579) | Cod sursa (job #1977507) | Cod sursa (job #2147711)
#include <fstream>
#define STIVA_MAX 16005
#define input "transport.in"
#define output "transport.out"
using namespace std;
ifstream in(input);
ofstream out(output);
int transporturi, cutii;
int stiva_cutii[STIVA_MAX];
int left_min = 0, right_max;
void Read()
{
in >> cutii >> transporturi;
for(int i = 1; i <= cutii; i++)
{
in >> stiva_cutii[i];
left_min = max(left_min, stiva_cutii[i]);
right_max += stiva_cutii[i];
}
}
bool Find(int capacity)
{
int transports = 1;
int local = 0;
for(int i = 1; i <= cutii; i++)
{
if(local + stiva_cutii[i] <= capacity)
local += stiva_cutii[i];
else
{
//out << local << " ";
local = stiva_cutii[i], transports++;
}
}
//out << "\n";
if(transports <= transporturi)
return true;
return false;
}
void Binary_Search()
{
int local_solution = 0;
while(left_min <= right_max)
{
int middle = (left_min + right_max) / 2;
bool stats = Find(middle);
if(stats == true)
local_solution = middle, right_max = middle - 1;
else left_min = middle + 1;
}
out << local_solution << "\n";
}
int main()
{
Read();
Binary_Search();
return 0;
}