曉萌希望將1到n的連續整數組成的集合劃分成兩個子集合,且保證每個集合的數字和是相等。例如,對於n=3,對應的集合能被劃分成 和 兩個子集合.
這兩個子集合中元素分別的和是相等的。
對於n=3,我們只有一種劃分方法,而對於n=7時,我們將有4種劃分的方案。
輸入包括一行,僅乙個整數,表示n的值(1≤n≤39)。
輸出包括一行,僅乙個整數,曉萌可以劃分對應n的集合的方案的個數。當沒發劃分時,輸出0。
樣例輸入
7
樣例輸出
4
ac**
#includeusingnamespace
std;
long
long dp[50][5000
];int
main()
int ss = s / 2
; dp[
0][0] = 1
;
for(int i = 1; i <= ss; i++)
for(int i = 1; i <= n; i++)}}
cout
<< dp[n][ss]/2
}
解析
dfs或者dp 等和的分隔子集
這道題我首先的思路是dfs,確實可以做,但是n上了30之後就執行超時了。說明dfs還是蠻容易超時的,適合小資料。include includeusing namespace std long long allsum 0 int cnt 0 int n void dfs int i,long long...
動態規劃 等和的分隔子集
題目 曉萌希望將1到n的連續整數組成的集合劃分成兩個子集合,且保證每個集合的數字和是相等。例如,對於n 3,對應的集合能被劃分成 和 兩個子集合.這兩個子集合中元素分別的和是相等的。對於n 3,我們只有一種劃分方法,而對於n 7時,我們將有4種劃分的方案。輸入包括一行,僅乙個整數,表示n的值 1 n...
動態規劃 等和的分隔子集
曉萌希望將1到n的連續整數組成的集合劃分成兩個子集合,且保證每個集合的數字和是相等。例如,對於n 3,對應的集合能被劃分成 和 兩個子集合.這兩個子集合中元素分別的和是相等的。對於n 3,我們只有一種劃分方法,而對於n 7時,我們將有4種劃分的方案。輸入包括一行,僅乙個整數,表示n的值 1 n 39...