整數劃分問題

2021-09-02 17:38:05 字數 599 閱讀 7852

題目描述

計算將乙個給定的正整數劃分為一系列正整數的和的方案數,稱為整數的劃分問題,例如,當給定正整數為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種。下面介紹一種通過遞迴方法得到乙...