Pagini recente » Cod sursa (job #1525683) | Cod sursa (job #2680026) | Cod sursa (job #1797436) | Cod sursa (job #1194100) | Cod sursa (job #2081832)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int n,k,v[16001],mx;
/*bool fct(int lim)
{
int i = 1,s = 0,cnt = 0;
while(i <= n)
{
while( s <= lim && i <= n )
{
s = s + v[i];
++i;
}
++cnt;
if(s > lim)
--i;
s = 0;
}
if(cnt <= k)
return 1;
return 0;
}*/
bool fct(int cap)
{
int nr = 0,cc = 0;
for (int i = 1; i <= n; ++i)
{
if (v[i] > cc)
{
++nr;
cc = cap;
}
if (v[i] > cc)
return false;
if (nr > k)
return false;
cc -= v[i];
}
return true;
}
int caut_bin(int s,int mx)
{
int pas = 1 << 13,r = mx-1;
while (pas != 0)
{
if (fct(r + pas) == 0 && r + pas <= s)
{
r += pas;
}
pas >>= 1;
}
++r;
return r;
}
int main()
{
in>>n>>k;
int s = 0;
mx = -1;
for (int i = 1; i <= n; ++i)
{
in>>v[i];
if (v[i] > mx)
mx = v[i];
s += v[i];
}
// int st = mx;
//int dr = s;
//int mij = ( dr + st ) / 2;
/*while( st <= dr )
{
if( fct(mij) == 1 )
{
if( mn > mij )
mn = mij;
dr = mij - 1;
}
else
st = mij + 1;
mij = (dr + st) / 2;
out<<mn;*/
out<<caut_bin(s,mx);
return 0;
}