• yl 练习


    对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小。

    关于最大值最小:

    例如一数列4 2 4 5 1要分成3段

    将其如下分段:

    [4 2][4 5][1]

    第一段和为6,第2段和为9,第3段和为1,和最大值为9。

    将其如下分段:

    [4][2 4][5 1]

    第一段和为4,第2段和为6,第3段和为6,和最大值为6。

    并且无论如何分段,最大值不会小于6。

    所以可以得到要将数列4 2 4 5 1要分成3段,每段和的最大值最小为6。

    思路:简单二分

    代码:

    #include <iostream>
    #include <cstdio>
    #define maxn 100005
    using namespace std;
    int cost[maxn];
    int n,m;
    bool judge(int x)
    {
        int s=0,t=0;
        for(int i=0;i<n;i++)
        {
            if(cost[i]>x)
               return false;
            if(s+cost[i]>x)
             {
                if(t>=m-1)
                   return false;
                t++;
                s=cost[i];
             }
            else
              s+=cost[i];
        }
        return true;
    }
    int binary(int max,int sum)  
    {
        int mid,left=max,right=sum;
        while(left<right)
        {
            mid=left+(right-left)/2;
            if(!judge(mid))
               left=mid+1;
            else
               right=mid;
        }
        return left;
    }
    int main()
    {
        int max=0;
        int sum=0;
        cin>>n>>m;
        for(int i=0;i<n;i++)
        {
            cin>>cost[i];
            max=max>cost[i]?max:cost[i];
            sum+=cost[i];
        }
        cout<<binary(max,sum);
        return 0;
    }

  • 相关阅读:
    Tomcat基本使用
    XML、java解释XML、XML约束
    配置文件的读取
    jdbc操作数据库以及防止sql注入
    java中的枚举类
    maven阿里云中央仓库
    spring boot&&cloud干货系列
    数据库 锁机制
    MySql的优化步骤
    MYSQL 索引无效和索引有效的详细介绍
  • 原文地址:https://www.cnblogs.com/jr-ag/p/8647132.html
Copyright © 2020-2023  润新知