基礎動態規劃第一課

2021-08-07 11:03:04 字數 1552 閱讀 4583

今天資訊學瀟湘館第一次開張,館主也挺高興的,館主其實也是只蒟蒻,寫部落格只是為了與大家分享收穫並反思總結,以後還望大家多關注我資訊學瀟湘館哦,好了,閒話少說,進入正題!

動態規劃這一章節對於很多入門的oier有點苦惱,但是熟練後就會比較輕鬆,當然不是一節課能講清楚地,想博主當年可是花了老大的盡呢,動態規劃(dp)是一種拆分問題以遞推或分治的思想解決到當前的最優解,通常用來求最優、最大或最小等等,那為什麼要用動態規劃呢?因為貪心雖然每一步都是最優的,但最後總的不一定是最優的(馬上見題就知道了),相反也就是說動態規劃不一定每一步都是最優的,但是最後總的是最優的,現在我們就來看一道動態規劃最經典的題,都被用臭了

三角形最佳路徑問題

從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,和最大的路徑稱為最佳路徑。你的任務就是求出最佳路徑上的數字之和。

注意:路徑上的每一步只能從乙個數走到下一層上和它最近的下邊(正下方)的數或者右邊(右下方)的數。

如下所示的由正整數數字構成的三角形:

7 3 8

8 1 0

2 7 4 4

4 5 2 6 5

從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,和最大的路徑稱為最佳路徑。你的任務就是求出最佳路徑上的數字之和。

注意:路徑上的每一步只能從乙個數走到下一層上和它最近的下邊(正下方)的數或者右邊(右下方)的數。

輸入

第一行為三角形高度100>=h>=1,同時也是最底層邊的數字的數目。

從第二行開始,每行為三角形相應行的數字,中間用空格分隔。

輸出

最佳路徑的長度數值。

樣例輸入

5 7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

樣例輸出

30

這道題我們分析得出就是求從第一層走到第n層每次只能向正下或正下右邊的乙個走,求走過的路徑最大數字和,這道題如果按貪心的話就是從(1,1)->(2,2)->(3,2)->(4,2)->(5,2),總和只有28,並不是最大的,可見這種題目不能用貪心。

這道題用動態規劃有兩種方法,一種就是從上面(1,1)走到第n層,再把第n層「打擂台」掃一遍,選最大的,還有一種就是從最後一層向上走,走到(1,1),然後這個第一層f(1,1)儲存的就是最優的,兩種**都會給出

第一種

#include 

using

namespace

std;

int n,a[105][105],f[105][105];//f陣列記錄的是走到當前位置的最優解

int main()

今天講的就是最簡單的,下次我們即將講基本動態規劃的應用——揹包

kip和大家下次再見!

矩陣相乘 動態規劃第一課

問題 給定n個矩陣 a1,a2,an 其中ai與ai 1是可乘的,i 1 n 1。如何確定計算矩陣連乘積的次序,使得依此次序計算矩陣連乘積需要的數乘次數最少。dp i j 表示矩陣ai到aj乘積的最少運算數 int idx maxn maxn idx i j 表示矩陣ai到aj的劃分位置 int a...

html 基礎第一課

快捷鍵 1 ctrl 快速新增單行注釋 2 ctrl shift 快速新增多行注釋 3 ctrl d 快速刪除游標所在的一行 4 ctrl y 反撤銷 5 ctrl alt 下方向鍵 快速複製並貼上當前行 標籤的屬性 標籤的一部分,用於包含額外的資訊,可以有多個屬性 屬性與屬性值成對出現 關鍵字 d...

測試基礎第一課

軟體測試概念 軟體測試 描述一種用來促進鑑定軟體的正確性 完整性 安全性和質量的過程。換句話說,軟體測試是一種實際輸出與預期輸出間的審核或者比較過程。軟體測試的經典定義是 在規定的條件下對程式進行操作,以發現程式錯誤,衡量軟體質量,並對其是否能滿足設計要求進行評估的過程。作為優秀的軟體測試人員應該具...