标题:子集和问题
给定一个正整数N(1<=N<=40),将集合{1,2,3,4,.....,N}拆分成两个集合,要求两个子集合中的元素之和相等,试问总共有多少种不同的分法。例如当N=3时,集合{1,2,3}可以分成{3}和{1,2}两个集合。
要求输入:
输入一个正整数N。
要求输出:
输出有多少种分法,如果分法不存在,输出0。
样例输入:
7
样例输出:
4
题目解析:
集合的和我们可以算出,sum=N*(N+1)/2,若存在,则每个子集合的和为N*(N+1)/4,若不存在分法,则N*(N+1)%4不为0,否则代表存在分法,接下来变成选出k个数,使得其和为N*(N+1)/4,有多少种方案。我们可以用动态规划的思路进行求解,定义函数F(i,sum)代表方案数,其中i代表集合中第i个元素,sum代表此时子集合的和,动态规划方程如下: