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,那麼利用這個神...