例2 5 整數劃分問題 例2 6漢諾塔問題

2021-09-26 06:10:19 字數 785 閱讀 9333

5 = 5 

= 4 + 1 

= 3 + 2 

= 3 + 1 + 1 

= 2 + 2 + 1 

= 2 + 1 + 1 + 1 

= 1 + 1 + 1 + 1 + 1

分為4種情況:

(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 如下...