C 動態規劃DP

2021-10-03 12:56:01 字數 3210 閱讀 8907

動態規劃:將子問題的解記錄下來,(記憶花搜尋)

狀態:dp[i][j]

狀態轉移方程:

從邊界開始(底開始),往上走,第[i][j]的狀態就是最大的加上它自己。

dp[i][j] = max(dp[i + 1][j], dp[i + 1][j + 1]) + f[i][j]

//邊界就是他自己

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

//從倒數第二層開始

for (int i = n - 1; i >= 1; i--)

}cout << dp[1][1];

6

-2 11 -4 13 -5 -2

狀態:dp[i]

狀態轉移方程:

從第乙個開始:第i個的狀態就是(自己)或者自己加上前面的。

dp[i] = max(dp[i], dp[i - 1] + f[i]);

void dynamicd()

cout << maxdp;

}

狀態:dp[i]:在i 之前由dp[i]個非遞減的序列元素

狀態轉移方程:

迴圈第i個數之前的每個數,並且找到比第i個數小並且找到dp最大的那個數

dp[i]=max (j=0,1,2…(i-1)&& a[j]<=a[i])

void dynamicd()

} ans = max(ans, dp[i]);

} cout << ans;

}

只記錄最長非遞迴

memset(dp, 0, sizeof(dp));

dp[0] = 1;

int tmax = f[0];

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

}for (int i = 0; i < n; i++)

8

1 2 3 -9 3 9 0 11

兩個字串

狀態dp[i][j]:長度為i的a串和長度為j的b串的lcs長度

狀態轉移方程:

相等那比較的字母同時往後移

不相等dp取前面最大的

dp[i][j]=dp[i-1][j-1] +1(a[i]==b[j])

dp[i][j]=max(dp[i-1][j],dp[i][j-1])(a[i]!=b[j])

邊界:dp[0][i]=dp[j][0]=0;(所以串從1開始讀)

使用char,標頭檔案#include不能使用gets()而應當使用gets_s(陣列起始位置,陣列長度)
初始化

[i][0]說明不與b陣列比較那麼應當為0,且陣列讀入應該從1開始

int dp[maxn][maxn];

char str1[maxn], str2[maxn];

int len1, len2;

void init()

先定義邊界

int i = 0, j = 0;

dp[0][0] = 0;

//初始不與另一陣列比較時 都為0

for (int i = 0; i <= len1; i++)

for (int j = 0; j <= len2; j++)

動態規劃,得到每一點的公共子長度

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

}for (int i = 0; i <= len1; i++)

cout << endl;

}

sadstory

adminsorry

乙個字串s的最長回文子串

狀態dp[i][j]表示s[i]至s[j]所表示的子串是否是回文子串(1是0非)

狀態轉移方程:

如果s[i]==s[j]:如果i+1到j-1是回文串,則它也是回文串

如果s[i]!+s[j] 不可能是回文串:

d[i][j]=d[i+1][j-1](s[i]==s[j])

dp[i][j]=0 (s[i]!=s[j])

邊界:長度為1或者2的子串

dp[i][i]=1,dp[i][i+1]=(s[i]==s[i+1])?1:0

按照子串的長度和子串的初始位置進行列舉//先列舉長度在列舉左端點。

先定義邊界;

memset(dp, 0, sizeof(dp));

//最長回文子串,初始為1,如果沒有回文子串的話就是1

int ans=1;

for (int i = 0; i < str.size(); i++) }}

cout << ans;

有向無環圖中最大權值的路:用鄰接矩陣的方式

dp[ii]:從i出發能獲得的最長路徑長度

choice:記錄i點的後繼結點

void init()

int dp(int i)

} }return dp[i];

}

dp[i]:點i到終點ed的最長距離

void init()

int dp(int i)

} return dp[i];

}

輸出路徑

/*最大的dp[i]*/

C 入門DP 動態規劃

本篇為入門級,dalao繞道 捂臉 dp最經典題目 01揹包問題 思路簡單清晰,將物品和價值都遍歷,進行選擇 for int i 1 i n i 從第乙個物品到最後乙個物品遍歷 cout dp n m endl 優化 時間複雜度不變,降低了空間複雜度 for int i 1 i n i for in...

區間DP 動態規劃 C

區間型別動態規劃是線性動態規劃的拓展,它在分階段劃分問題時,與階段中元素出現的順序和由前一階段的哪些元素合併而來有很大的關係。1 合併 即將兩個或多個部分進行整合。2 特徵 能將問題分解成為兩兩合併的形式。3 求解 對整個問題設最優值,列舉合併點,將問題分解成為左右兩個部分,最後將左右兩個部分的最優...

動態規劃 dp

威威貓系列故事 打地鼠 威威貓最近不務正業,每天沉迷於遊戲 打地鼠 每當朋友們勸他別太著迷遊戲,應該好好工作的時候,他總是說,我是威威貓,貓打老鼠就是我的工作!無話可說.我們知道,打地鼠是一款經典小遊戲,規則很簡單 每隔乙個時間段就會從地下冒出乙隻或多隻地鼠,玩遊戲的人要做的就是打地鼠。假設 1 每...