題目描述
計算將乙個給定的正整數劃分為一系列正整數的和的方案數,稱為整數的劃分問題,例如,當給定正整數為6時,可以有如下劃分:
6=6;
6=5+1;
6=4+2=4+1+1;
6=3+3=3+2+1=3+1+1+1;
6=2+2+2=2+2+1+1=2+1+1+1+1;
6=1+1+1+1+1+1+1。
如果用f(n)代表正整數n的劃分數,則f(6)=11
現在,給你數字n,要求你計算f(n)
輸入乙個整數n
輸出輸出f(n)。注意,由於答案非常大,你的答案需要輸出模除1000000007之後的結果
樣例輸入
樣例輸出
11**如下:
#includelong long mod = 1000000007;
int max= 100000;
int main()
for(i=2;i<=n;i++)
for( k=0;k<=n;k++)
}printf("%lld\n",a1[n]%mod);
return 0;
}
整數劃分問題
整數劃分問題是乙個經典問題,幾乎在講演算法設計的書中都會講,下面把主要的思想給總結下。所謂整數劃分,就是將乙個正整數n劃分為一系列的正整數之和,如將n可以劃分為 1 我們該如何找出所有的劃分呢?我們可以先來看看整數劃分的規律 譬如正整數 6 劃分情況如下 6 5 14 2 4 1 1 3 3 3 2...
整數劃分問題
給定乙個自然數,分成k部分,a1,a2.的數的和,要求a1 a2.求有多少種?原理 整數n拆分成最多不超過m個數的和的拆分數,和n 拆分成最大不超過m的拆分數相等。根據這個原理,原問題就轉化成了求最大拆分為k的拆分個數與最大拆分為k 1的拆分個數的差 f n,k f n,k 1 f n k,k 如下...
整數劃分問題
首先是遞迴解法 整數劃分問題是將乙個正整數n拆成一組數連加並等於n的形式,且這組數中的最大加數不大於n。如6的整數劃分為 65 1 4 2,4 1 1 3 3,3 2 1,3 1 1 1 2 2 2,2 2 1 1,2 1 1 1 1 1 1 1 1 1 1 共11種。下面介紹一種通過遞迴方法得到乙...