有關遞推與遞迴的回顧

2022-06-01 18:36:10 字數 1898 閱讀 2477

注:本文為回顧,所以僅會記錄本人認為的難點與分析個人認為,遞推與動態規劃實際是密不可分的,你說它簡單,但到了做題時難以找到轉移方程,你要是說它難,但它確確實實是最基本的東西了

這是一道最基礎的遞推題,根據對數列的描述,不難發現,從第3項開始,我們都可以用這樣乙個式子表示:\(f_i=f_+f_\)

因而,我們可以直接利用迴圈得到,**如下:

#include #include using namespace std;

int n,a,b[1000001],mmax = 2;

int main()

return 0;

}

題目傳送門:點這裡

這一道題其實可以看做一道最基礎的動態規劃,每一步有3個狀態,我們可以發現,當樓梯有1層時,僅有1種走法;當樓梯有2層時,有2種走法:走2個1層或1個2層;當樓梯有3層時,有4種走法:一次三層,三次一層,2、1和1,2;再往後,我們可以發現,i層時可行方法為i-1層i-2層i-3層的方法數總和,即\(f_i=f_+f_+f_\),而\(f_1=1,f_2=2,f_3=4\)為邊界條件,進行迴圈,按輸入得到結果即可,**如下:

#include #include using namespace std;

long long int n,f[72];

int main()

return 0;

}

題目傳送門:點這裡

這一道題則就是一種搜尋,其實並沒有太大的難度

具體細節詳見下方**:

#include #include using namespace std;

int n,t[101][101],o[101][101],m,ch[10001][2],last,now,ans; //o在本處並無實際用處,ch為佇列,ch[x][0]為行,ch[x][1]為列,last,now分別為佇列的頭和尾

int main()

else if (c == '#')

o[i][j] = t[i][j] = -1;

} //原圖的輸入

cin >> m;

for (int k = 2;k <= m;k ++)

if (j - 1 >= 0) //同上

if (t[i][j - 1] == 0)

if (t[i + 1][j] == 0)

if (t[i][j + 1] == 0)

} for (int i = last;i < now;i ++)

last = now;//清空佇列

} for (int i = 0;i < n;i ++) //統計

for (int j = 0;j < n;j ++)

if (t[i][j] == 1)

ans ++;

cout << ans ;

return 0;

}

題目傳送門:點這裡

搜尋與回溯,即深度優先搜尋(dps),屬於遞迴的一種,而且,許多遞推可做的題目同樣可用遞迴做出,如:斐波那契數列

這一道題可以說是十分基礎了,基本是必會的題目,主體思想很簡單,從第乙個皇后的位置進行選擇,然後依次判斷此行每個位置是否可以放下,如果是,進行遞迴,如果不行,判斷下一位置,然後進行回溯

#include#includeusing namespace std;

int a[30];

int b[30];

int c[30];

int d[30];

int flag=0;

void print()

{ flag++;

cout<<"no. "《題目傳送門:點這裡

日後優化持續跟進

遞推與遞迴

遞推與遞迴 遞推像是多公尺諾骨牌,遞迴是大事化小。遞推的效率更高 遞推 斐波那契數列 例 母親為兒子的四年大學學費準備了一筆存款,兒子每月月底取下月生活費1000元。銀行年利率為 1.71 畢業時連本帶息要取出 1000 元。則要存入多少錢。include define rate 0.0171 in...

遞推與遞迴

遞迴 將問題規模為n的問題,降解成若干個規模為n 1的問題,依次降解,直到問題規模可求,求出低階規模的解,代入高階問題中,直至求出規模為n的問題的解。遞推 構造低階的規模 如規模為i,一般i 0 的問題,並求出解,推導出問題規模為i 1的問題以及解,依次推到規模為n的問題。遞迴包括回溯和遞推兩個過程...

遞迴與遞推

1 遞迴與遞推的定義 前者是 後者是對以前的問題進行計算,以得出當前問題的大結果。2 它們的典例和運用遞迴 遞推dfs,搜尋與回溯 動態規劃 用遞推能做的,記憶化搜尋定能夠實現 遞推僅能求方案數,求具體方案需用遞迴 3 各種關於遞推的例題 爬樓梯 數樓梯 兔子問題 includeusing name...