zoukankan      html  css  js  c++  java
  • codevs 3278 最小m 段和问题

    时间限制: 1 s
     空间限制: 256000 KB
     题目等级 : 黄金 Gold
    题目描述 Description

    给定 n 个整数(不一定是正整数)组成的序列,现在要求将序列分割为 m 段,每段子序列中的数在原序列 中连续排列。如何分割才能使这 m 段子序列的和的最大值达到最小?

    输入描述 Input Description

     文件的第 1 行中有 2 个正整数 n 和 m。 正整数 n 是序列 的长度;正整数 m 是分割的断数。 接下来的一行中有 n 个整数。

    输出描述 Output Description

    文件的第 1 行中的数是计算出 的 m 段子序列的和的最大值的最小值。

    样例输入 Sample Input

    1 1

    10

    样例输出 Sample Output

    10

    数据范围及提示 Data Size & Hint

    N<=1000,M<=N

    二分做法 点击传送

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    
    using namespace std;
    
    int ans,l,r,n,m,i,a[1000+1];
    int judge(int now)
    {
        int tot=0,x=0;
        for(i=0;i<n;++i)
        {
            if(a[i]>now) return 0;
            if(a[i]+x<=now)
            x+=a[i];
            else 
            {
                x=a[i];
                tot++;
                if(tot>=m) return 0;
            }
        }
        return 1;
    }
    int main()
    {
        cin>>n>>m;
        for(i=0;i<n;++i)
        {
            cin>>a[i];
            r+=a[i];
        }
        while(l<=r)
        {
            int mid=(l+r)>>1;
            if(judge(mid))
            {
                ans=mid;
                r=mid-1;
            }
            else l=mid+1;
        }
        cout<<ans;
    }
    我们都在命运之湖上荡舟划桨,波浪起伏着而我们无法逃脱孤航。但是假使我们迷失了方向,波浪将指引我们穿越另一天的曙光。
  • 相关阅读:
    day14_集合框架1(ArrayList,LinkedList,HashSet)
    day13_String、StringBuffer、StringBuilder
    初识Java_day01
    关于局部内部类访问带有final修饰符的局部变量
    day03,day04_数组,循环(上)
    day09(下)_异常(上)
    day08_多态
    day11_多线程(多线程安全问题)
    day16_集合框架3(HashMap,TreeMap)
    day09(上)_内部类
  • 原文地址:https://www.cnblogs.com/ruojisun/p/6391595.html
Copyright © 2011-2022 走看看