動態規劃練習

2022-09-06 16:45:08 字數 2878 閱讀 9956

1、問題描述:乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。

例: 台階n=0   輸出:0

台階n=2   輸出:2 

台階n=3   輸出:3

台階n=4   輸出:5 

台階n=7   輸出:21

int step(int

a)

return

b[a];

}int

main()

cout

<< "

跳上不同台階的方法數:

分別輸入台階數為4,5,6,7時跳台階的方式數為 5、8、13、21

2、問題描述:給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。

舉例:

輸入:arr =[

[1,3,1

], [

1,5,1

], [

4,2,1]]

輸出:

7解釋: 因為路徑

1→3→1→1→1 的總和最小。

#include#define m 3

#define n 4

intmain()

,, };

//cout << a[m - 1][n - 1] << endl;

int dp[m][n] ={};

dp[0][0] = a[0][0

];

for (int i = 1; i < m; i++)

dp[i][

0] =dp[i-1][0]+ a[i][0

];

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

dp[0][j] = dp[0][j - 1] + a[0

][j];

for (int i = 1; i < m; i++)

}cout

<< dp[m - 1][n - 1] <

}

測試輸出:

3、(打家劫舍)問題描述:在⼀條直線上,有n個房屋,每個房屋中有數量不等的財寶,有⼀個盜 賊希望從房屋中盜取財寶,由於房屋中有報警器,如果同時從相鄰的兩個房屋中盜取財寶就會觸發報警器。問在不觸發報警器的前提 下,最多可獲取多少財寶?例如 [5,2,6,3,1,7],則選擇5,6,7

int rob(int *a,int

l)return dp[l - 1];}

}int

main()

cout

<< rob(a, l) <

}

樣例輸出:

偷取3+5+7為利益最大化選擇

4、問題描述:給定⼀個陣列,求這個陣列的連續⼦陣列中,最⼤的那⼀段的和。 如陣列[-2,1,-3,4,-1,2,1,-5,4] 的⼦段 為:[-2,1]、[1,-3,4,-1]、[4,-1,2,1]、...、[-2,1,-3,4,-1,2,1,-5,4],和最⼤的是[4,-1,2,1],為6。

int getmax_sub(int *a,int

l)

return

max;

}int

main()

cout

<< getmax_sub(a, l) <

}

樣例測試執行輸出:

5、題⽬描述: 在⼀個由 0 和 1 組成的⼆維矩陣內,找到只包含 1 的最⼤正⽅形,並返回其⾯積。

例如:

輸⼊:101

0010

1111

1111

1001

0輸出:

動態規劃練習

題目描述 給出兩個單詞word1和word2,計算出將word1 轉換為word2的最少操作次數。你總共三種操作方法 插入乙個字元 刪除乙個字元 替換乙個字元 include include include using namespace std int find min int x,int y,i...

動態規劃練習

題目描述 蘋果裝配問題,把乙個區域分成n m個小區域,其中每個區域有一定數量的蘋果,設左上角為0,0,右下角為n 1,m 1.從0,0開始出發,每經過乙個區域,就把該區域的蘋果全部收走,求一條路徑使得收穫的蘋果最多。include include using namespace std class ...

動態規劃練習 採藥

題目要求 採每一株藥都需要一些時間,每一株也有它自身的價值。一段時間內,可以採到一些草藥。在規定時間內讓採到的草藥的總價值最大。題目思路 此題為01揹包問題,令b i t 表示前i株藥材恰在t時間內採完獲得醉的價值,狀態轉移方程 b i t max 細節處理 進行空間優化 b t max 初始化時除...