标题只是吸引你进来的QAQ,大佬帮忙看看我哪写挂了吧QAQ。。。
我 l 先赋值的 1,看了题解改成了最大值,结果还是不对,不理解了。。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1000005;
int n, m;
int a[N];
bool check(int max_val)
{
int sum = 0, cnt = 0;
for (int i = 1; i <= n; i ++ )
if (sum + a[i] <= max_val) sum += a[i];
else cnt ++ , sum = a[i];
return cnt >= m;
}
int main()
{
int l = 0, r = 0, mid;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i ++ ) scanf("d", &a[i]), l = max(l, a[i]), r += a[i];
while (l <= r)
{
mid = (l + r) >> 1;
if (check(mid)) l = mid + 1;
else r = mid - 1;
}
printf("%d\n", l);
return 0;
}