Pagini recente » Cod sursa (job #1073656) | Cod sursa (job #1044977) | Cod sursa (job #952344) | Cod sursa (job #502209) | Cod sursa (job #1002826)
#include <iostream>
#include <fstream>
#define NMax 16010
using namespace std;
int n, k, answer;
int stiva[NMax];
inline void Read()
{
ifstream f ("transport.in");
f>>n>>k;
int i;
for (i=1; i<=n; ++i)
f>>stiva[i];
f.close();
}
inline bool Possible (int capacity)
{
int i, ccapatcity = capacity, nrtransp = 0;
for (i=1; i<=n; ++i)
{
if (ccapatcity - stiva[i] >= 0)
ccapatcity -= stiva[i];
else
{
ccapatcity = capacity - stiva[i];
++nrtransp;
if (nrtransp > k)
return false;
}
}
++nrtransp;
if (nrtransp > k)
return false;
return true;
}
inline void Solve()
{
int Left, Right, Middle;
Left = Right = 0;
for (int i=1; i<=n; ++i)
{
Right += stiva[i];
Left = max(Left, stiva[i]);
}
while (Left <= Right)
{
Middle = (Left + Right) >> 1;
if (Possible(Middle))
{
answer = Middle;
Right = Middle - 1;
}
else
Left = Middle + 1;
}
}
inline void Write()
{
ofstream g ("transport.out");
g<<answer<<"\n";
g.close();
}
int main()
{
Read();
Solve();
Write();
return 0;
}