對於由從1到n (1 <= n <= 39)這n個連續的整數組成的集合來說,我們有時可以將集合分成兩個部分和相同的子集合。
例如,n=3時,可以將集合 分為和。此時稱有一種方式(即與順序無關)。
n=7時,共有四種方式可以將集合 分為兩個部分和相同的子集合:
和 和
和 和
輸入:程式從標準輸入讀入資料,只有一組測試用例。如上所述的n。
輸出:方式數。若不存在這樣的拆分,則輸出0。
dp[7]=1+dp[6]+2+dp[5]+3+dp[4]+4+dp[3]+5+dp[2]+6+dp[1];
dp[6]=1+dp[5]+2+dp[4]+3+dp[3]+4+dp[2]+5+dp[1];
······
dp[0]=1;只有一種方式——————————個人覺得這種描述方式最簡單,剛看見一片繁瑣的解釋如下:
#include"stdio.h"
#include"string.h"
int main()
else
printf("%d\n",dp[sum]/2);
}
其實還有乙個問題,為什麼定義為dp[100]的時候就無效記憶體引用,求大神解釋
劃分子集問題
問題描述 已知集合a 及集合上的關係r 其中 ai,aj 表示ai與aj間存在衝突關係。要求將a劃分成互不相交的子集a1,a2,ak,k n 使任何子集中的元素均無衝突關係,同時要求分子集個數盡可能少。思路 先構造乙個佇列,將a中元素進隊,然後依次取出元素放入乙個待分配的組中,若當前元素與改組中已經...
佇列應用 劃分子集問題
集合a如下 a 集合r中 a,b 表示a與b是衝突關係,不能放在同一子集中 r 求一可行的子集劃分,使a劃分為互不相交的子集,並使子集個數盡量少。include using namespace std define maxsize 10 迴圈佇列元素個數應加一 define error 0 defi...
資料結構 佇列應用舉例 劃分子集問題
經過一天的奮鬥,解決 description 已知集合a 及集合上的關係r 其中 ai,aj 表示ai與aj間存在衝突關係。要求將a劃分成互不相交的子集a1,a2,ak,k?n 使任何子集中的元素均無衝突關係,同時要求分子集個數盡可能少 sample input a r sample output ...