Pagini recente » Cod sursa (job #3247707) | Cod sursa (job #2638729) | Cod sursa (job #1993687) | Cod sursa (job #2107981) | Cod sursa (job #2467690)
#include <fstream>
#include <queue>
#define input "transport.in"
#define output "transport.out"
#define NMAX 16005
using namespace std;
ifstream in(input);
ofstream out(output);
int saltele, transporturi, capacitati[NMAX], minim;
void Read_Data()
{
in >> saltele >> transporturi;
for(int i = 1; i <= saltele; i++)
{
in >> capacitati[i];
minim = max(minim, capacitati[i]);
}
}
bool Is_Ok(int capacity)
{
//out << capacity << " -> ";
int drumuri = 0;
for(int i = 1; i <= saltele; i++)
{
int capap = 0;
while(capap < capacity)
{
capap += capacitati[i];
i++;
}
if(capap <= capacity)
i--;
else capap -= capacitati[i-1], i-=2;
drumuri++;
//out << capap << " ";
}
//out << "\n";
if(drumuri <= transporturi)
return true;
return false;
}
void Binary_Search()
{
int st = minim, dr = 16000, sol = -1;
while(st <= dr)
{
int midd = (st + dr) / 2;
if(Is_Ok(midd)) dr = midd - 1, sol = midd;
else st = midd + 1;
}
out << sol;
}
int main()
{
Read_Data();
Binary_Search();
return 0;
}