![【题解-洛谷】P1466 [USACO2.2] 集合 Subset Sums](http://pic.xiahunao.cn/yaotu/【题解-洛谷】P1466 [USACO2.2] 集合 Subset Sums)
题目P1466 [USACO2.2] 集合 Subset Sums题目描述对于从1 ∼ n 1\sim n1∼n的连续整数集合能划分成两个子集合且保证每个集合的数字和是相等的。举个例子如果n 3 n3n3对于{ 1 , 2 , 3 } \{1,2,3\}{1,2,3}能划分成两个子集合每个子集合的所有数字和是相等的{ 3 } \{3\}{3}和{ 1 , 2 } \{1,2\}{1,2}是唯一一种分法交换集合位置被认为是同一种划分方案因此不会增加划分方案总数如果n 7 n7n7有四种方法能划分集合{ 1 , 2 , 3 , 4 , 5 , 6 , 7 } \{1,2,3,4,5,6,7 \}{1,2,3,4,5,6,7}每一种分法的子集合各数字和是相等的{ 1 , 6 , 7 } \{1,6,7\}{1,6,7}和{ 2 , 3 , 4 , 5 } \{2,3,4,5\}{2,3,4,5}{ 2 , 5 , 7 } \{2,5,7\}{2,5,7}和{ 1 , 3 , 4 , 6 } \{1,3,4,6\}{1,3,4,6}{ 3 , 4 , 7 } \{3,4,7\}{3,4,7}和{ 1 , 2 , 5 , 6 } \{1,2,5,6\}{1,2,5,6}{ 1 , 2 , 4 , 7 } \{1,2,4,7\}{1,2,4,7}和{ 3 , 5 , 6 } \{3,5,6\}{3,5,6}给出n nn你的程序应该输出划分方案总数。输入格式输入文件只有一行且只有一个整数n nn。输出格式输出划分方案总数。输入输出样例 #1输入 #17输出 #14说明/提示【数据范围】对于100 % 100\%100%的数据1 ≤ n ≤ 39 1\le n \le 391≤n≤39。翻译来自 NOCOW。USACO 2.2代码1二维数组#includebits/stdc.husingnamespacestd;constintN3910;longlongn,V,v,f[N][(N*NN)/2];intmain(){cinn;V(1n)*n/2;if(V%2)cout0;else{V/2;f[0][0]1;for(inti1;in;i){vi;for(intj0;jV;j){f[i][j]f[i-1][j];if(vj)f[i][j]f[i-1][j-v];}}coutf[n][V]/2;//{1,6,7} 和 {2,3,4,5}属于一个划分方式,但是会被计算两次}return0;}代码2一维数组#includebits/stdc.husingnamespacestd;constintN3910;longlongn,V,v,f[(N*NN)/2];intmain(){cinn;V(1n)*n/2;if(V%2)cout0;else{V/2;f[0]1;for(inti1;in;i){vi;for(intjV;jv;j--)f[j]f[j-v];}coutf[V]/2;}return0;}结果