Pagini recente » Cod sursa (job #184017) | Cod sursa (job #3192272) | Cod sursa (job #1044866) | Cod sursa (job #802674) | Cod sursa (job #2025147)
//#include <iostream>
#include <fstream>
using namespace std;
int v[16005],f[16005];
int camioane(int cant,int n,int k)
{
int drum=0,sum=0;
for(int i=1;i<=n;i++)
{
sum+=v[i];
if(sum>cant and sum<2*cant){
sum=v[i];
drum++;
}
else
if(sum>=2*f[cant])
return k+1;
}
if(sum<=cant)
drum++;
return drum;
}
int main()
{
ifstream cin("transport.in");
ofstream cout("transport.out");
int ma=-1,sol=16005,n,k,st=1,dr=16000,mij;
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>v[i];
ma=max(v[i],ma);
}
for(int i=1;i<=16000;i++)
f[i]=i;
while(st<dr){
mij=(st+dr)/2;
int p=camioane(mij,n,k);
if(p<=k){
sol=min(sol,mij);
dr=(st+dr)/2;
}
else
st=(st+dr)/2+1;
}
cout<<sol;
return 0;
}