ACM總結 動態規劃(4)問題的形式化描述

2021-10-06 18:08:10 字數 1747 閱讀 4463

dp系列:

acm總結——動態規劃(1)重疊子問題、最優子結構_nameofcsdn的部落格-csdn部落格_重疊子問題和最優子結構

動態規劃的核心在於分析最優子結構,其中包含如下內容:

如何描述問題,如何描述子問題,問題的解和子問題的解之間的關係,即遞推式,問題的解空間結構,如何遍歷這個解空間,等等。

問題的描述形式,取決於我們所求的答案的形式和結構.

個人理解主要分三種情形:

(1)完全按照題目所求來描述

(2)基於答案分解,附加特殊規則的精確化描述

(3)自帶空間壓縮的降維描述

對於問題本身的描述很複雜的題目,我們的描述越精確,我們的遞推式也就越簡潔。

例如:(1)完全按照題目所求來描述

例1:力扣 oj 1143. 最長公共子串行

f(a,b)表示陣列a的前a個數和陣列b的前b個數的最長公共子串行

(2)基於答案分解,附加特殊規則的精確化描述

什麼叫基於答案分解呢?

要求前n個數的最長上公升子串行,我們可以把答案分解為n種情況:

以第i個數(i從1到n)為結尾的最長上公升子串行

例2:力扣 oj 300. 最長上公升子串行

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。

f(i)表示以第i個數結尾的最長上公升子串行的長度

f(i-1)表示以第i-1個數結尾的最長上公升子串行的長度

所以f(i)=max{f(j) | j

例3:csu 1225: acm小組的佇列(最長上公升子串行的個數)

這個題目需要把以第i個數結尾的最長上公升子串行的長度和數目一起算出來。

ps:完全按照題目所求來描述,求得的值就是答案,

基於答案分解,附加特殊規則的精確化描述,求得值之後,還要在所有值裡面取乙個最優解

ps:基於答案分解是根據答案的最後乙個值,分解成很多情況,得到的是分解問題,形式和原問題不同

而子問題是形式和原問題相同,但規模比原問題小,是原問題經過分治思想得到的。

(3)自帶空間壓縮的降維描述

首先,什麼是空間壓縮?

acm總結——動態規劃(3)空間壓縮

再看看什麼叫自帶空間壓縮的降維描述:

例4:力扣oj 1218. 最長定差子串行

給定差值dif,求最長等差子串行

如果陣列沒有重複的數,那就簡單,ans[arr[i]]=ans[arr[i]-dif]+1

如果有重複的數,那麼相同的數如何選取?

自然是取第i個數之前,等於arr[i]-dif且ans值最大的那個,但是如果搜尋的話就會超時,必須在o(1)的時間內找到這個數或者找到它的ans值。

所以我們除了需要知道ans[arr[i]]表示以第i個數結尾的最長等差子串行之外,還需要確定,ans[x]表示啥?

ans[x]=ans[arr[j]],其中j=max{j | arr[j]=x,j沒錯,這麼乙個精準的形式化描述,讓我們意識到,ans[x]的含義中包含了i這個變數,也就是說ans陣列的值的含義是隨著時間一直在變化的,這其實是隱含了空間壓縮。

矩陣連乘問題 動態規劃 ACM

題目描述 給定n個矩陣 a1,a2,an 其中,ai與ai 1是可乘的,i 1,2 n 1 用加括號的方法表示矩陣連乘的次序,不同的計算次序計算量 乘法次數 是不同的,找出一種加括號的方法,使得矩陣連乘的次數最小。例如 a1是a 5 10 的方陣 a2是a 10 100 的方陣 a3是a 100 2...

ACM 階段性總結 ACM 動態規劃 DP

這短時間看了 揹包九講 看到揹包問題解法中的優美之處也看到揹包問題在現實中的應用,總結出一句話 揹包問題值得一看。揹包問題可以概括為這樣的模型 有若干種選擇,每種選擇有一定的代價和價值,做某些選擇會得到特定的狀態,問我們在約定的條件下怎麼得到特定的狀態?這裡的狀態可以是代價和或者價值和或者由其他這兩...

動態規劃的問題總結

1 dp 個數 weight 例子 poj 1837 balance dp i w relate to dp i 1 w c j 這道題中dp儲存的不是weight,而是方法個數 include include include include include include define maxnu...