Pagini recente » Cod sursa (job #1649167) | Cod sursa (job #124421) | Cod sursa (job #1117858) | Cod sursa (job #6233) | Cod sursa (job #1309184)
#include <iostream>
#include <fstream>
using namespace std;
const int NMax = 16000;
int S[NMax];
long long int n,k;
long long int VolMinim= 256000001;
bool CanDo(long long m)
{
long long int q=1,i,sum=0;
for(i=1;i<=n;i++)
{
if(S[i] > m) return 0;
if(sum + S[i] <= m)sum = sum + S[i];
else
{
q++; sum = 0;
i--;
}
}
if(q <= k ) return 1;
return 0;
}
void CautBin()
{
long long int lo = 0, hi = 256000001;
long long int m;
while(hi - lo > 1)
{
m = (lo + hi)/2;
if(CanDo(m))
{
//if(m==8) {cout<< lo << " "<< hi ;}
if(VolMinim > m) VolMinim = m;
//cout<<m<<endl;
hi = m-1;
}
else
{
lo = m+1;
}
}
if(VolMinim > lo && CanDo(lo)) VolMinim = lo;
}
int main()
{
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>S[i];
CautBin();
cout<<VolMinim;
}