zoukankan      html  css  js  c++  java
  • zzuli 1919 数列划分

    题面:

    Description

    晴天想把一个包含n个整数的序列a分成连续的若干段,且和最大的一段的值最小,但他有强迫症,分的段数不能超过m段,然后他就不会分了。。。他想问你这个分出来的和最大的一段的和最小值是多少?

    Input

    第一行输入一个整数t,代表有t组测试数据。
    每组数据第一行为两个整数n,m分别代表序列的长度和最多可分的段数。
    接下来一行包含n个整数表示序列。
    0<=n<=50000 1<=m<=n,0<=ai<=10000。

    Output

    输出一个整数表示和最大的一段的最小值。

    Sample Input

    1 3 2 1 3 5

    Sample Output

    5

    HINT

    1 3 5 分成一段可以为1 3 5和为9,分成两段可以为1,3 5或者1 3,5,和最大的一段值分别为8,5,所以答案为5

    题目思路:序列划分问题。为了使最大子序列和尽可能小,我们应该尽可能的划分当前序列。划分出的序列和最小应该是当前序列最大值,最大为当前序列和,进行二分查找。在二分查找的过程中对当前值(最大子序列和)进行判定,如果找到一个满足的解继续向左查询。
    具体看代码
    #include<cstdio>
    #include<stdio.h>
    #include<cstdlib>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<vector>
    #include<queue>
    #define INF 0x3f3f3f3f
    #define MAX 1000005
    
    using namespace std;
    
    int a[MAX],n,m;
    
    bool check(int x)//x为需要进行判定的最大子序列和
    {
        int i,sum=0,cnt=0;
        for(i=1;i<=n;i++)//如果某个数大于最大子序列和则错误
        {
            if(a[i] > x)
                return false;
            if(sum+a[i] <= x)
                sum+=a[i];
            else
            {
                sum=a[i];
                cnt++;//重新开始一段子序列。并记录已经开拓的子序列个数
            }
            if(cnt > m-1)//如果未遍历完的情况下就开拓了m个子序列,则错误
                return false;
        }
        return true;
    }
    
    int main()
    {
        int i,j,T,L,R;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&n,&m);
            L=-INF;
            R=0;
            for(i=1;i<=n;i++)
            {
                scanf("%d",&a[i]);
                L=max(L,a[i]);
                R+=a[i];
            }
            while(L<R)
            {
                int mid=(L+(R-L)/2);
                if(check(mid))
                {
                    R=mid;
                }
    
                else
                {
                    L=mid+1;
                }
            }
            printf("%d
    ",L);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    jmeter(二十三)分布式测试
    jmeter(二十二)内存溢出原因及解决方法
    jmeter(二十一)jmeter常用插件介绍
    jmeter(二十)阶梯式加压测试
    jmeter(十九)HTTP属性管理器
    《jmeter:菜鸟入门到进阶》系列
    jmeter(十八)关联之XPath Extractor
    <转>jmeter(十七)目录结构
    jmeter(十六)配置元件之计数器
    Springmvc中参数的绑定
  • 原文地址:https://www.cnblogs.com/alan-W/p/5781435.html
Copyright © 2011-2022 走看看