對于從1到N (1 <= N <= 39) 的連續整數集合,能劃分成兩個子集合,且保證每個集合的數字和是相等的。舉個例子,如果N=3,對于{1,2,3}能劃分成兩個子集合,每個子集合的所有數字和是相等的: {3} 和 {1,2} 這是唯一一種分法(交換集合位置被認為是同一種劃分方案,因此不會增加劃分方案總數) 如果N=7,有四種方法能劃分集合{1,2,3,4,5,6,7},每一種分法的子集合各數字和是相等的: {1,6,7} 和 {2,3,4,5} {注 1+6+7=2+3+4+5} {2,5,7} 和 {1,3,4,6} {3,4,7} 和 {1,2,5,6} {1,2,4,7} 和 {3,5,6} 給出N,你的程序應該輸出劃分方案總數,如果不存在這樣的劃分方案,則輸出0。
1.只有和為偶數時才有解 2.然后后面用dp f[i][j]表示前i個數和為j的個數 f[i][j]=f[i-1][j]+f[i-1][j-i] 或=f[i-1][j] (加上的數大于總和) 最后輸出f[n][sum/2] O(n*sum)
新聞熱點
疑難解答