動態規劃 等和的分隔子集

2022-08-26 07:27:10 字數 737 閱讀 2499

曉萌希望將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...