#include<stdio.h>
#include<stdlib.h>
#include<math.h>
_Bool judge(int mid,int a[],int n,int m)
{
int i,sum=0,t=0;
for(i=0;i<n;i++)
{
if(sum+a[i]>mid)
{
sum=a[i];
t++;
}
else
sum=sum+a[i];
}
if(t>=m) return 1;
else return 0;
}
//贪心算法
/*int ok(int target)
{
while(i<n-1)
{
sum=a[i]; //第一个
if(sum>target)
return 0;
j=i+1;
while(sum<=target)//当每次执行while循环的时候,最后一次是用来判断上面几个相加<=target
//正在执行这个大于target,所以不包含正在执行这个数值
//和执行j++的
{
sum=sum+a[j];
j++;
}
i=j-1;
count++;//意思在于执行完了一次fajo月 然后+1;
}
if(count<=m)
return 1;
}
*/
//主函数
int main()
{
int a[10001];
int n, m,ans;
int s=0;
int left=1,right;
int mid;
scanf("%d %d\n",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d\n",&a[i]);
s=s+a[i];
if(a[i]>=left)
left=a[i];
}
right = s;
while(left<=right)
{
mid=(int)(left+right)/2;//二分法
if(judge(mid,a,n,m))
{
//ans=mid;
left=mid+1;}
else
right=mid-1;
}
printf("%d",mid);
return 0;
}
在c语言编译器当中,可以正确运行,并且输出正确答案,但是在检测题目当中,显示结果是运行错误.