對於乙個正整數n的分劃,就是把n表示成正整數之和的表示式。主要,分劃與順序無關,例如6=5+1和6=1+5被認為是同一種分劃。
解題思路:
定義乙個函式q(n,m),表示正數n的「任何加數都不超過m」的分劃的數目,n的所有分劃數目p(n)就應該表示為q(n,n)
一般的q(n,m)有如下遞迴關係:
1) q(n,n) = 1+q(n,n-1)
2) q(n,m) = q(n,m-1)+q(n-m,,m),其中q(n-m,m)表示q(n,m)加數中包含m的分劃。
遞迴的停止條件:
1) q(n,1)=1,即n個1;
2) q(1,m)=1,表示整數n=1只有乙個分劃,不管最大被加數的上限m是多大。
#include
using
namespace
std;
int divinteger(int n, int m)
int main()
遞迴求解整數的分劃問題
整數劃分問題是演算法中的乙個經典命題之一,有關這個問題的講述在講解到遞迴時基本都涉及到。所謂整數劃分,是指把乙個正整數n寫成如下形式 n m1 m2 m3 mi 其中mi為正整數,並且1 mi n 則為n的乙個劃分。如果 中的最大值不超過m,即max m,則稱它屬於n的乙個m劃分。這裡我們記n的m劃...
計蒜客 A1634 劃分整數
標籤 計數dp 相似題目 題目蒜頭君特別喜歡數學。今天,蒜頭君突發奇想 如果想要把乙個正整數 n 分解成不多於 k 個正整數相加的形式,那麼一共有多少種分解的方式呢?蒜頭君覺得這個問題實在是太難了,於是他想讓你幫幫忙。輸入共一行,包含兩個整數n 1 n 300 和k 1 k 300 含義如題意所示。...
poj2104 劃分樹問題
這個題目的意思是給你乙個區間,讓你找到在某個給出的子區間當中第k大的數。這是我的第乙個劃分樹題目,因為之前做了好多線段樹的題目了,看了看書上基本的 然後按照自己的思路寫了出來。按照這個題目的思路,得用到二分,把給出的元素x n 排好序y n 對於乙個給出的子區間,那麼第k大的元素應該滿足兩點 1 在...