集合a
對於從1到n (1 <= n <= 39) 的連續整數集合,能劃分成兩個子集合,且保證每個集合的數字和是相等的。舉個例子,如果n=3,對於能劃分成兩個子集合,每個子集合的所有數字和是相等的:
和 這是唯一一種分法(交換集合位置被認為是同一種劃分方案,因此不會增加劃分方案總數) 如果n=7,有四種方法能劃分集合,每一種分法的子集合各數字和是相等的:
和 和 和
和 給出n,你的程式應該輸出劃分方案總數,如果不存在這樣的劃分方案,則輸出0。
分析一下題目,發現此題實際上是求選多個數,和為\(n*(n+1)/4\)的方案數。然後,我沒有發現有些情況是沒有答案的,即\((n*(n+1)/4)%4 != 0\)的情況下是沒有方案的,因為此時求得的所以數的和是無法均分成兩半的,所以應該特殊判斷,這裡沒搞好。
然後我考慮狀態,發現了子問題,令\(f(m)\) 為和為m的方案數,實際上就是$$\sum_^ f(i)$$ 然後這可以轉換成01揹包。令\(f[0] = 1\)則對於任意的\(j\)和\(1<=k<=n\) 都有\(f[j+k] +=f[j]\)
這樣遞推一下狀態就可以了。
**實現
組合數和上一題大同小異,用組合數學的知識可以得到總方案數為\(2^n\)搞一下l到r 所以所有方案數的和,除一下就完事了。
**實現
力扣刷題記錄01
題目分類 陣列 時間 2020 09 25 給定乙個矩陣 a,返回 a 的轉置矩陣。矩陣的轉置是指將矩陣的主對角線翻轉,交換矩陣的行索引與列索引 示例 輸入 1,2,3 4,5,6 7,8,9 輸出 1,4,7 2,5,8 3,6,9 輸入 1,2,3 4,5,6 輸出 1,4 2,5 3,6 思路...
我的筆試題記錄 0 1揹包問題
給定一組多個 n nn 物品,每種物品都有自己的重量 w iw i wi 和價值 v iv i vi 在限定的總重量 總容量 c cc 內,選擇其中若干個 也即每種物品可以選0個或1個 求能取得的最大價值。用更抽象的話說,給定正整數1 w i n,1 vi n,1 c n 1 leq w i leq...
揹包 01揹包
01揹包 有n種物品與承重為m的揹包。每種物品只有一件,每個物品都有對應的重量weight i 與價值value i 求解如何裝包使得價值最大。dp i,v 表示前i個物體 包括第i個 面對容量為v的揹包的最大價值,c i 代表物體i的重量,w i 代表物體i的價值 如果第i個物體不放入揹包,則揹包...