曉萌希望將1到n的連續整數組成的集合劃分成兩個子集合,且保證每個集合的數字和是相等。例如,對於n=3,對應的集合能被劃分成
和 兩個子集合.
這兩個子集合中元素分別的和是相等的。
對於n=3,我們只有一種劃分方法,而對於n=7時,我們將有4種劃分的方案。
輸入包括一行,僅乙個整數,表示n的值(1≤n≤39)。
輸出包括一行,僅乙個整數,曉萌可以劃分對應n的集合的方案的個數。當沒發劃分時,輸出0。
樣例輸入
7樣例輸出
4//dp[i][j]表示[1,i]和為j的子集數
#include
using namespace std;
long long dp[40][40 * (40 + 1) / 2];
int main()
dp[1][1] = 1;
for (int i = 2; i <= n; i++)
for (int j = 1; j <= half; j++)
if (j < i)
dp[i][j] = dp[j][j];
else if (j == i)
dp[i][j] = dp[i - 1][j] + 1;
else
dp[i][j] = dp[i - 1][j] + dp[i - 1][j - i];
cout << dp[n][half] / 2 << endl;
return 0;
}
動態規劃 等和的分隔子集
題目 曉萌希望將1到n的連續整數組成的集合劃分成兩個子集合,且保證每個集合的數字和是相等。例如,對於n 3,對應的集合能被劃分成 和 兩個子集合.這兩個子集合中元素分別的和是相等的。對於n 3,我們只有一種劃分方法,而對於n 7時,我們將有4種劃分的方案。輸入包括一行,僅乙個整數,表示n的值 1 n...
等和的分隔子集 DP
曉萌希望將1到n的連續整數組成的集合劃分成兩個子集合,且保證每個集合的數字和是相等。例如,對於n 3,對應的集合能被劃分成 和 兩個子集合.這兩個子集合中元素分別的和是相等的。對於n 3,我們只有一種劃分方法,而對於n 7時,我們將有4種劃分的方案。輸入包括一行,僅乙個整數,表示n的值 1 n 39...
計蒜客 等和的分隔子集
曉萌希望將1到n的連續整數組成的集合劃分成兩個子集合,且保證每個集合的數字和是相等。例如,對於n 3,對應的集合能被劃分成 和 兩個子集合.這兩個子集合中元素分別的和是相等的。對於n 3,我們只有一種劃分方法,而對於n 7時,我們將有4種劃分的方案。輸入包括一行,僅乙個整數,表示n的值 1 n 39...