Pagini recente » Cod sursa (job #2200648) | Cod sursa (job #3217362) | Cod sursa (job #140398) | Cod sursa (job #2315228) | Cod sursa (job #1309014)
#include <iostream>
#include <fstream>
using namespace std;
const int NMax = 16000;
int S[NMax];
int n,k;
long long int VolMinim;
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 ;}
hi = m+1;
// if(VolMinim > m) VolMinim = m;
}
else
{
lo = m+1;
}
}
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];
VolMinim = 18000;
CautBin();
cout<<VolMinim;
}