###### 左眼皮跳跳

to do what I want to do , to be what I want to be !

# 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\n",ca,sum[i]);
}
return 0;
}


#### poj 3782 Equal Sum Partitions 模拟水题

2015-01-24 23:13:59

#### hdu3280Equal Sum Partitions (区间DP)

2014-07-20 13:02:36

#### hdu3280

2012-10-03 09:49:37

#### poj3280(区间dp，好题)

2016-06-13 11:16:03

#### Leetcode 416. Partition Equal Subset Sum 对半分 解题报告【修正版】

2016-10-09 13:24:43

#### leetcode 698. Partition to K Equal Sum Subsets（记忆化搜索/状压dp）

2017-10-15 17:18:59

#### hdu3280(不是区间DP的解法 很好理解)

2017-03-11 16:32:33

#### leetcode 633. Sum of Square Numbers

2017-07-18 09:56:33

#### POJ 3782 Equal Sum Partitions 已被翻译 可能会

2017-02-14 20:47:39

#### [LeetCode]Minimum Moves to Equal Array Elements(Java)

2016-12-01 17:30:48

## 不良信息举报

HDU 3280 Equal Sum Partitions（二分查找）