3動態規劃

2021-07-12 06:03:55 字數 1515 閱讀 4003

此次專題主要講解動態規劃,題目大致分為兩類 一種是遞迴來解決,一種是0/1揹包問題。

動態規劃就是把乙個問題分成多個階段來解決,並且每個階段都相互有所聯絡。其遵循最優性原理。

1,不論初始狀態和第一步決策是什麼,餘下的決策相對於前一次決策所產生的新狀態,構成乙個最優決策序列。

2,最優決策序列的子串行,一定是區域性最優決策子串行。

3,包含有非區域性最優的決策子串行,一定不是最優決策序列。

根據老師課件可以總結為解題步驟:

1,把問題分為若干個子問題就是分為若干個階段

2,建立狀態轉移方程,一般是遞推公式

3,找出邊界條件

4,將邊界值代入方程

5,遞推求解

一,遞迴問題。

有一樓梯共m級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第m級,共有多少種走法?

這是一道簡單的遞迴問題,沒上乙個台階看做階段,從第三層就能找出規律,他的狀態轉移方程為f(n) = f(n-1)+f(n-2)

之後將邊界值帶入就能求解。

二,求最長序列問題。

求公共最長子序列的題,首先要區別子串行與字串。子串行是可以不連續的,而字串一定是連續的。

我一般的做法就是建立動態規劃陣列dp[i][j]代表當比較到兩個字串的盡頭時的最大公共子串行就是dp[i][j]

如圖:

狀態轉移方程為:dp[i][j] = most(dp[i-1][j],dp[i][j],dp[i][j-1])分別是一串與二串之前有相同字元,同位有相同字元,之後有相同字元,取最大值。

三,0/1揹包問題

典型題目:給你物品數目以及揹包的容量,下面是各個物品的價值以及容量,讓你求揹包能裝入的最大價值

狀態轉移方程:dp[i][j] = most(dp[i][j],dp[i-1][j-w[i])+v[i]);

w[i]即第i件物品的重量 v[i]第i件物品的價值dp[i][j]把前i件物品裝入j容量的揹包中所能獲得的最大價值。

對每件物品就有兩種選擇,放或者不放,取其最大值,如果放這件物品則為dp[i-1][j-w[i]] + v[i],前i-1件物品放入j-w[i]的容量中所能獲得的最大價值,如果不放就是dp[i-1][j]。

完全揹包問題,在0/1揹包問題的基礎上,每種物品不單單是一件了,而是多件。

1) 子問題定義:f[i][j]表示前i物品中選取若干件物品放入剩餘空間為j的揹包中所能得到的最大價值。

2) 根據第i物品放多少件進行決策

dp[i][j] = max(f[i-1][j-k*w[i]) + k*v[i],f[i-1][j]) 0<=k*w[i]<=j 就是比0/1揹包問題多加了一層每種物品數量的迴圈

還有分組揹包問題,把物品分成若干組,在每一組中求最優。

動態規劃(3)

robberies include include include includeusing namespace std 這題是參考的 自己的能力還是不可以。不過做了這題,再和0 1揹包問題想一想,覺得收穫還是不錯。說將逃跑率當成物品價值 小弟還是要繼續消化這條題的思想。double f 10020...

動態規劃 3

尼克每天上班之前都連線上英特網,接收他的上司發來的郵件,這些郵件包含了尼克主管的部門當天要完成的全部任務,每個任務由乙個開始時刻與乙個持續時間構成。尼克的乙個工作日為n分鐘,從第一分鐘開始到第n分鐘結束。當尼克到達單位後他就開始幹活。如果在同一時刻有多個任務需要完成,尼克可以任選其中的乙個來做,而其...

ITA 動態規劃3

動態規劃,雙調歐幾里得旅行商問題 旅行商問題描述 平面上n個點,確定一條連線各點的最短閉合旅程。這個解的一般形式為np的 在多項式時間內可以求出 bentley 建議通過只考慮雙調旅程 bitonictour 來簡化問題,這種旅程即為從最左點開始,嚴格地從左到右直至最右點,然後嚴格地從右到左直至出發...