排版
粘代码时点击回复讨论下第二行第三个按键
by 角边边证全等 @ 2018-02-11 19:17:12
@[Harzard](/space/show?uid=67282)
by 角边边证全等 @ 2018-02-11 19:31:50
```cpp
int check(int x)
{
int sum=0; int t=0;
for(int i=1;i<=n;i++)
{
sum=sum+a[i];
if(i==n&&sum<=x) { t++; break; }
if(i==n&&sum>x) { t=t+2; break; }
if(sum==x) { t++; sum=0; }
if(sum>x) { sum=a[i]; t++; }
}
return t<=k;
```
by Harzard @ 2018-02-12 14:17:34
```
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
int n,m,a[100005];
int check(int x)
{
int sum=0,cnt=0;
for(int i=0;i<n;i++){
if(sum+a[i]<=x){
sum+=a[i];
}else{//超过最大值
sum=a[i];
cnt++;
}
}
if(cnt>=m)
return 1;
else//cnt<m
return 0;
}
int main()
{
//while(scanf("%d%d",&n,&m))
{
scanf("%d%d",&n,&m);
int r=0,l=0,ans;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
l=max(l,a[i]);
r+=a[i];
}
while(r>=l)
{
int mid = (r+l)/2;
if(check(mid)==1){
l=mid+1;
}else{
r=mid-1;
ans=mid;//最大值 的最小值
}
//cout<<"["<<l<<","<<r<<"]"<<ans<<endl;
}
printf("%d\n",ans);
}
return 0;
}
```
by Freddie @ 2018-11-03 10:19:51