zoukankan      html  css  js  c++  java
  • 洛谷P1182 数列分段 Section II(二分+贪心)

    题意跳转

    分析:这个题要求最大值最小,且答案区间和的上限具有单调性,所以依然是一道二分答案的题,判断答案依然用到贪心算法

    答案的最小值即最小上限时序列中最大的那个数字,最大值是序列和。

    如果答案合法,就找寻更小的答案,如果答案不合法,就找寻更大的答案。

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #define maxn 100005
    
    using namespace std;
    
    int  num[maxn],n,m;
    
    inline bool check(int d)
    {
        int cnt=0,sum=0;
        for(int i=1;i<=n;i++)
            if(sum+num[i]<=d) sum+=num[i];
            else sum=num[i],cnt++;
        if(cnt>=m) return false;
        else return true;
    }
    
    int main()
    {
        scanf("%d%d",&n,&m);
        int l=0,r=0;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&num[i]);
            r+=num[i];
            l=max(l,num[i]);
        }
        while(l<=r)
        {
            int mid=(l+r)>>1;
            if(check(mid)) r=mid-1;
            else l=mid+1;
        }
        printf("%d
    ",l);
        return 0;
    }
    View Code
  • 相关阅读:
    第六周总结
    石家庄地铁线路查询系统
    第五周总结报告
    二维数组
    第四周总结
    个人作业一(补充)
    第三周总结
    个人作业一
    开课博客
    CentOS7 网卡配置文件解释
  • 原文地址:https://www.cnblogs.com/Hoyoak/p/11354580.html
Copyright © 2011-2022 走看看