其他分享
首页 > 其他分享> > P1182 数列分段 Section II

P1182 数列分段 Section II

作者:互联网

https://www.luogu.com.cn/problem/P1182
涉及知识点:贪心,二分,前缀和
黄色题
思路:
注:答案的区间范围要根据题目和题目的问题来确定   代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 100010;
int n,m,a[N];
bool check(int k)
{
    int cur=0,ans=1;  //这里应该是ans=1,因为段数=分段次数+1,不要写成ans=0 
    for(int i=1;i<=n;i++)
    {
        if(cur+a[i]>k)
        {
            cur=0;
            ans++;
        }
        cur+=a[i];
    }
    return ans<=m;
}
int main()
{
    scanf("%d%d",&n,&m);
    int l=0,r=0,ans=0;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        r+=a[i];
        l=max(l,a[i]);
    }
    while(l<=r)
    {
        int mid=(l+r)>>1;
        if(check(mid))
        {
            ans=mid;
            r=mid-1;
        }
        else l=mid+1;
    }
    printf("%d\n",ans);
    return 0;
}

 

标签:二分,此题,int,Section,mid,II,答案,ans,P1182
来源: https://www.cnblogs.com/2elaina/p/16460671.html