呼叫莱德
  • 板块灌水区
  • 楼主一咕咕一
  • 当前回复22
  • 已保存回复22
  • 发布时间2024/8/29 11:56
  • 上次更新2024/8/29 15:37:00
查看原帖
呼叫莱德
772815
一咕咕一楼主2024/8/29 11:56

P1182 数列分段 Section II

#include <bits/stdc++.h>
using namespace std;
int n, m;
int a[10000007];
bool check(int x)
{
    int sum = 0, cnt = 0;
    for (int i = 1; i <= n; i++)
    {
        sum += a[i];
        if(a[i] > x)return false;
        if (sum > x)
        {
            cnt++;
            sum = a[i];
        }
    }
    cnt++;
    return cnt > m;
}
int find(int l, int r)
{
    if (l + 1 >= r)
        return r;
    int mid = (l + r) / 2;
    if (check(mid))
        return find(mid, r);
    else
        return find(l, mid);
}
int main()
{
    // freopen(".in","r",stdin);
    // freopen(".out","w",stdout);
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    cout << find(1, 1e9) << endl;
    system("pause");
    return 0;
}
2024/8/29 11:56
加载中...