Pagini recente » Cod sursa (job #2523098) | Cod sursa (job #2741498) | Cod sursa (job #919302) | Cod sursa (job #1176600) | Cod sursa (job #1180041)
#include <cstdio>
#define Nmax 16009
using namespace std;
int n,k,v[Nmax],big;
int Check(long long C){
int i=1,num=1,sum=0;
while(v[i] <= C && i <= n){
if(sum+v[i] > C) {sum=v[i];num++;}
else sum+=v[i];
i++;
}
if(i!=n+1) num =-1;
return num;
}
void solve(){
int st=big,x;
long long dr=big*big,j=0,mid;
while(st<=dr){
mid = (st+dr)/2;
x = Check(mid);
if(x==-1) st=mid+1;
else{
if(x < k)
dr=mid-1;
else if(x > k)
st=mid+1;
else {dr=mid-1;j=mid;}}
}
printf("%d\n",j);
}
int main(){
int i;
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++) {scanf("%d",&v[i]);if(v[i]>big) big=v[i];} solve();
return 0;
}