遞迴設計 八皇后 神奇的口袋 數列 吃糖果

2021-09-10 06:08:46 字數 3276 閱讀 4633

2019.01.26 是日晴朗,紀念下放假以來第一次9點起,最近怎麼越活越回去呢,別再患得患失啦,過好當下就行喲~

本文主要是遞迴設計練習的總結,包含以下內容(難度依次遞減)

問題 c: 神奇的口袋

完整code(c/c++)

問題 b: 數列

問題 a: 吃糖果

詳細設計參考n皇后全解,在其基礎上修改給n賦值為8即可

以下給出8皇后完整實現**

#include

const

int maxn =11;

int n=

8,sum=

0,p[maxn]

,hashtable[maxn]=;

char ans[95]

[10];

//儲存所有全排列

//判斷兩點是否在同一主/斜對角線上

//是-->true;否-->false

bool isok

(int ix,

int iy,

int jx,

int jy)

//優化**

void

generatep_refined

(int index)

ans[sum-1]

[i-1]=

'\0'

;return;}

//全排列核心

for(

int x =

1; x <= n; x++)}

if(!bflag)

continue

;//嘗試下乙個數

p[index]

= x;

hashtable[x]

= true;

generatep_refined

(index+1)

; hashtable[x]

= false;}}

}int

main()

for(

int i =

0; i < a; i++

)return0;

}

題目描述有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a1,a2……an。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的問題是,john有多少種不同的選擇物品的方式。

輸入

輸入的第一行是正整數n (1 <= n <= 20),表示不同的物品的數目。接下來的n行,每行有乙個1到40之間的正整數,分別給出a1,a2……an的值

輸出

輸出不同的選擇物品的方式的數目。

樣例輸入212

2832110

5樣例輸出10

該問題實質是揹包問題,動態規劃的思想,遞迴實現(另一種思路可將所有組合列舉出來,判斷是否滿足條件即可,較煩~)

每件物品僅有兩種狀態,選、不選

選了當前物品後,剩餘空間減少,進行下一件物品取捨

不選當前物品,剩餘空間不變,進行下一件物品取捨

以此匯出遞推表示式,以下為詳細設計

1.函式引數

2.遞迴邊界

3.遞迴執行

物品僅有兩種狀態:選,不選。若是i,s不滿足以上邊界條件,則需進行取捨

#include

intcount

(int arr,

int i,

int s)

else

if(arr[i]

> s)

return

count

(arr,i-

1,s)

;//優化

else

return

count

(arr,i-

1,s)

+count

(arr,i-

1,s-arr[i]);

//遞迴執行

該題類似斐波那契,但有些許不同:f(0)=0;f(1)=1;f(n)=f(n-1)+f(n-2),(n>1)

求解數列對大家來說輕而易舉,關鍵在於列印圖形,列印關鍵在於分而治之

列印的字元共兩種:空格,數字。所以可將空格與數字分開列印

列印就得找規律,所謂規律即是每一行列印個數與行數間的關係式

這裡假設行列值均從0開始且列印n行(具體規律交給聰明的你啦~)

#include

//類似斐波那契:f(0)=0;f(1)=1;f(n)=f(n-1)+f(n-2),(n>1)

intf

(int n)

//列印圖形時將其分為空格與數字兩部分

//找到各自與行數間的關係式即可

intmain()

//n組測試資料

for(

int k =

0; k < n; k++

)//依次列印數字

類似斐波那契數列:f(1)=1;f(2)=2;f(n)=f(n-1)+f(n-2),(n>2)

#include

//類似斐波那契數列

intfunc

(int n)

intmain()

for(

int i =

0; i < sum; i++

)return0;

}

百煉2755 神奇的口袋(遞迴)

有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a 1,a 2 a n。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的問題是,j...

演算法筆記4 3遞迴 神奇的口袋

有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a1,a2 an。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的問題是,john...

2755 神奇的口袋(遞迴 動態規劃)

總時間限制 10000ms 記憶體限制 65536kb 描述有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a1,a2 an。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神...