計蒜客————等和的分隔子集
阿新 • • 發佈:2018-12-30
- 23.89%
- 1000ms
- 65536K
曉萌希望將1到N的連續整陣列成的集合劃分成兩個子集合,且保證每個集合的數字和是相等。例如,對於N=3,對應的集合{1,2,3}能被劃分成{3} 和 {1,2}兩個子集合.
這兩個子集合中元素分別的和是相等的。
對於N=3,我們只有一種劃分方法,而對於N=7時,我們將有4種劃分的方案。
輸入包括一行,僅一個整數,表示N的值(1≤N≤39)。
輸出包括一行,僅一個整數,曉萌可以劃分對應N的集合的方案的個數。當沒發劃分時,輸出0。
樣例輸入
7
樣例輸出
4
dp,以數為層.
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int main() { int n; while(~scanf("%d",&n)) { long long map[45][800]= {},sum=n*(n+1)/2; if(sum&1) { printf("0\n"); continue; } for(int i=1; i<=n; i++) { map[i][i]+=1; for(int j=i+1; j<=sum/2; j++) map[i][j]+=map[i-1][j-i]; for(int j=1; j<=sum/2; j++) map[i][j]+=map[i-1][j]; } printf("%lld\n",map[n][sum/2]/2); } return 0; }