記錄乙個遇見的問題,關於將乙個整數 m 分解成 k 個數之和:
1,首先 k 個數不能有 0 ,如果有 0 也很簡單啊,將問題進一步分解成「將整數 m 分解成 k-1 個數之和」,以此類推一直到分解成 1 個數之和,所有相加就可以得出數量;
2,對於順序顛倒不算,比如將 3 分解成 2 個數之和,可以分成 2 和 1,其中 1 和 2 也是一樣的,所以 3 分解成 2 個數的分法是 1 種。
這個問題首先我們用遞迴的思路,這樣子好理解,通過遞推公式,完全可以改寫成 dp:
首先給出結論,f(m, k) = f(m-1, k-1) + f(m-k, k)
s.t. f(m, k) = 1, if k == 1 of m == k;
f(m, k) = 0, if m < k.
接下來進行分析:
1,f(m-1, k-1)怎麼理解呢,就是把第 k 個數放成 1,然後把剩下的 m-1 這個數分成 k-1 份,可以分的方法數,就是相當於最後乙個是 1 的所有分的方法數;
2,f(m-k, k) 其實表現的就是,就是第 k 個數不是 1,可以分的方法數。這個原因是什麼呢,就是相當於給 k 個位置,每個位置先放乙個 1,接下來剩下的 m-k ,這個數字再往這 k 個位置上分。
將乙個數m分解成n個數之和的所有可能
週末的時候,師兄提了乙個小學生的題目,然後這個題目自我估計,反正我是做不出來的。然後師兄想用計算機的方法,寫個 看能不能把這個問題解答出來,於是就找了一下我這個菜雞一起討論 題目就不貼了,樓主感覺小學生過的好難啊 最後師兄表示他在乙個問題上卡住了,簡化之後問題是這樣的 有n個數,他們之和為m,這些組...
將n分解成連續整數之和
從鍵盤輸入乙個數,然後求出連續整數相加使其和剛好和輸入的數相等。如 15 1 2 3 4 5 15 4 5 6 15 7 8 開始想了很久,並且一直在想計算,比如例舉所有.這肯定能實現,但是效率不高。後來想起了等差數列來計算。這時候就只要尋找合適了首項以及對應的長度即可。對於乙個l個步長為1首項為a...
將乙個偶數分解成質數之和
目標 將乙個偶數,分解成質數之和。public class disintegrateevennumber 判斷乙個正整數是否是質數 public static boolean isprimenum int inputnum else return result 判斷是否是乙個偶數 public st...