題目內容:
對於由從1到n(1<=n<=39)這n個連續的整數組成的集合來說,我們有時可以將集合分成兩個部分和相同的子集合。
例如,n=3時,可以將集合分為和。此時稱有一種方式(即與順序無關)。
n=7時,共有四種方式可以將集合分為兩個部分和相同的子集合:和和
和和輸入描述
程式從標準輸入讀入資料,只有一組測試用例。如上所述的n。
輸出描述
方式數。若不存在這樣的拆分,則輸出0。
輸入樣例
輸出樣例
4一開始沒想到用dp做, 試了回溯, 然而會算到重複的結果上去, 而且複雜度也太大了, 剪枝也不夠, 用dp很好解決, 附一維陣列優化
#include#include#includeusing namespace std;
int f[50];
int ans, n;
long long d[50][800];
int main()
} cout << d[n][ans] / 2; }
}
#include#include#includeusing namespace std;
long long d[800];
int n, ans;
int main()
cout << d[ans] / 2; }
}
分割等和子集 動態規劃
給定乙個只包含正整數的非空陣列。是否可以將這個陣列分割成兩個子集,使得兩個子集的元素和相等。注意 每個陣列中的元素不會超過100 陣列的大小不會超過200 示例 1 輸入 1,5,11,5 輸出 true 解釋 陣列可以分割成 1,5,5 和 11 示例 2 輸入 1,2,3,5 輸出 false ...
動態規劃 等和的分隔子集
題目 曉萌希望將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...