先講一下dp的一般思路吧:
將原問題分解為子問題
(1)把原問題分解為若干個子問題,子問題和原問題形式相同
或類似,只不過規模變小了。子問題都解決,原問題即解
決(數字三角形例)。
(2)子問題的解一旦求出就會被儲存,所以每個子問題只需求解一次。
*確定狀態
在用動態規劃解題時,我們往往將和子問題相關的各個變數的一組取值,稱之為乙個「狀態」。乙個「狀態」對應於乙個或多個子問題,所謂某個「狀態」下的「值」,就是這個「狀態」所對應的子問題的解。
確定一些初始狀態(邊界狀態)的值
以「數字三角形」為例,初始狀態就是底邊數字,值
就是底邊數字值。
確定狀態轉移方程
定義出什麼是「狀態」,以及在該 「狀態」下的「值」後,就要找出不同的狀態之間如何遷移――即如何從乙個或多個「值」已知的「狀態」,求出另乙個「狀態」的「值」。狀態的遷移可以用遞推公式表示,此遞推公式也可被稱作「狀態轉移方程」。
例題:滑雪
**:
#include
#pragma warning(disable:4996)
using
namespace std;
const
int maxn =
1000+10
;const
int inf =
0x3f3f3f3f
;int a[
110]
[110
],b[
110]
[110];
int x[4]
=;int y[4]
=;intdp
(int o,
int p)
;int r, c;
intmain()
}int max =0;
for(i =
0; i < r; i++)}
printf
("%d\n"
, max+1)
;return0;
}intdp(
int o,
int p)}}
return b[o]
[p];
}
今天還寫了一道01揹包的模板題,這個之後應該會具體學,到時候再說好了。 動態規劃 dp
威威貓系列故事 打地鼠 威威貓最近不務正業,每天沉迷於遊戲 打地鼠 每當朋友們勸他別太著迷遊戲,應該好好工作的時候,他總是說,我是威威貓,貓打老鼠就是我的工作!無話可說.我們知道,打地鼠是一款經典小遊戲,規則很簡單 每隔乙個時間段就會從地下冒出乙隻或多隻地鼠,玩遊戲的人要做的就是打地鼠。假設 1 每...
動態規劃,dp
線性動規區間動規樹形動規 區間動規 根據題目要求,全域性最優滿足區域性最優 典型題例 加分二叉樹 洛谷1040 題目介紹 題目描述 設乙個n 個節點的二叉樹t 的中序遍歷為 1,2,3,n 其中數字 1,2,3,n 為節點編號。每個節點都有乙個分數 均為正整數 記第j 個節點的分數為dj。二叉樹t ...
DP動態規劃
include include include include include include includeusing namespace std 動態規劃 利用子問題求解整個問題 關鍵 記錄子問題的解 列出狀態轉移方程 寫法 遞推 由邊界向上,最終得到目標問題的解 遞迴 由目標問題出發,向下遞迴...