• HDU 3280 Equal Sum Partitions(二分查找)


    Equal Sum Partitions

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 551    Accepted Submission(s): 409


    Problem Description
    An equal sum partition of a sequence of numbers is a grouping of the numbers (in the same order as the original sequence) in such a way that each group has the same sum. For example, the sequence:
    2 5 1 3 3 7
    may be grouped as:
    (2 5) (1 3 3) (7)
    to yield an equal sum of 7.

    Note: The partition that puts all the numbers in a single group is an equal sum partition with the sum equal to the sum of all the numbers in the sequence.

    For this problem, you will write a program that takes as input a sequence of positive integers and returns the smallest sum for an equal sum partition of the sequence.
     

    Input
    The first line of input contains a single integer P, (1 ≤ P ≤ 1000), which is the number of data sets that follow. The first line of each data set contains the data set number, followed by a space, followed by a decimal integer M, (1 ≤ M ≤ 10000), giving the total number of integers in the sequence. The remaining line(s) in the dataset consist of the values, 10 per line, separated by a single space. The last line in the dataset may contain less than 10 values.
     

    Output
    For each data set, generate one line of output with the following values: The data set number as a decimal integer, a space, and the smallest sum for an equal sum partition of the sequence.
     

    Sample Input
    3 1 6 2 5 1 3 3 7 2 6 1 2 3 4 5 6 3 20 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1
     

    Sample Output
    1 7 2 21 3 2
     

    Source
     

    Recommend



    /*
     题意:n个数,分成若干个集合,要求每一个集合的数和同样,求集合最小值
     思路:枚举当前集合推断是否满足条件
    
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    
    typedef __int64 ll;
    
    #define N 10005
    #define INF 0x3f3f3f3f
    
    int sum[N];
    int n;
    
    bool fdd(ll temp)
    {
         int hh=0;
         int pos=0;
         while(pos!=n)
         {
             hh+=temp;
             pos=upper_bound(sum+1,sum+n+1,hh)-(sum+1);
             if(sum[pos]!=hh)
             {
                return false;
             }
         }
         return true;
    }
    
    int main()
    {
        int i,j,t,ca;
        sum[0]=0;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&ca,&n);
            int x;
            for(i=1;i<=n;i++)
            {
                scanf("%d",&x);
                sum[i]=sum[i-1]+x;
            }
    
    
            for(i=1;i<=n;i++)
                if(fdd(sum[i])) break;
    
            printf("%d %d
    ",ca,sum[i]);
        }
        return 0;
    }
    


  • 相关阅读:
    angularjs MVC、模块化、依赖注入详解
    SpringBoot2.0整合Redission
    SpringBoot2.0整合SpringSecurity实现自定义表单登录
    SpringBoot2.0整合SpringSecurity实现WEB JWT认证
    基于Redis实现消息队列的几种方式
    函数初识
    noip200204过河卒
    邮票问题
    noip200205均分纸牌
    废品回收
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6882860.html
Copyright © 2020-2023  润新知