5 = 5分為4種情況:= 4 + 1
= 3 + 2
= 3 + 1 + 1
= 2 + 2 + 1
= 2 + 1 + 1 + 1
= 1 + 1 + 1 + 1 + 1
(1)當 n=1 或 m=1 時 q(n,m)=1,因為只能劃分為全 1 的情況,即
(2)當m>n時q(n,m)=1,只有一種情況。
(3)當n==m時q(n,n):此時就是對n的劃分出來的數沒有限制,預設限制就是不大於n,此時劃分的總類數要分兩種情況才比較好解決:
1.劃分出來的數包含n本身:那只有一種方式 比如 6的劃分 只有 6;只有一種方式
2.劃分出來的數不包含n本身:就可以認為是將6劃分出來的數都小於6,其實就是都小於或等於5, 即q(n,m-1)
(4)當n>m>1時:可以看成是n==m的情況加上n<=m-1的情況,向下遞迴
#include using namespace std;
int f(int n,int m) //從k到m進行全排列
else if (m > n)
else if (m == n)
else if (n > m&&m > 1) }
int main()
void hanoi(int n,char a,char b,char c) //a,b,c的型別可以是int,1,2,3
}int main()
問題 F 例6 6 整數區間
請程式設計完成以下任務 1.從檔案中讀取閉區間的個數及它們的描述 2.找到乙個含元素個數最少的集合,使得對於每乙個區間,都至少有乙個整數屬於該集合,輸出該集合的元素個數。首行包括區間的數目n,1 n 10000,接下來的n行,每行包括兩個整數a,b,被一空格隔開,0 a b 10000,它們是某乙個...
整數劃分問題
整數劃分問題是乙個經典問題,幾乎在講演算法設計的書中都會講,下面把主要的思想給總結下。所謂整數劃分,就是將乙個正整數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 如下...