動態規劃總結篇

2021-08-29 00:09:26 字數 1871 閱讀 7496

**

對於同一型別問題的總結

leetcode 516. 最長回文子串行

給定乙個字串s,找到其中最長的回文子串行。可以假設s的最大長度為1000。

示例 1:

輸入:「bbbab」

輸出:乙個可能的最長回文子串行為 「bbbb」。

示例 2:

輸入:「cbbd」

輸出:乙個可能的最長回文子串行為 「bb」

class solution {

public int longestpalindromesubseq(string s) {

int n = s.length();

if(n<=1)

return n;

int dp = new int[n][n];

for(int len = 0;len解析:本題要求最長回文子串行,所以用動態規劃dp來做

dp[i][j]代表的含義是在長度為j - i 的序列中,以i開始,以j結束的子串行的最長回文的長度。

由此我們可以得出dp[i][j] = max(dp[i+1][j],dp[i][j-1],以及dp[i+1][j-1]和s[i]與s[j]的關係。即dp[i+1][j-1]+s[i]==s[j]?2:0)

leetcode 312 戳氣球

有 n 個氣球,編號為0 到 n-1,每個氣球上都標有乙個數字,這些數字存在陣列 nums 中。

現在要求你戳破所有的氣球。每當你戳破乙個氣球 i 時,你可以獲得 nums[left] * nums[i] * nums[right] 個硬幣。 這裡的 left 和 right 代表和 i 相鄰的兩個氣球的序號。注意當你戳破了氣球 i 後,氣球 left 和氣球 right 就變成了相鄰的氣球。

求所能獲得硬幣的最大數量。

說明:你可以假設 nums[-1] = nums[n] = 1,但注意它們不是真實存在的所以並不能被戳破。

0 ≤ n ≤ 500, 0 ≤ nums[i] ≤ 100

示例:

輸入: [3,1,5,8]

輸出: 167

解釋: nums = [3,1,5,8] --> [3,5,8] --> [3,8] --> [8] -->

coins = 315 + 358 + 138 + 181 = 167

class solution {

public int maxcoins(int nums) {

if(nums==null||nums.length<=0)

return 0;

int coins = new int[nums.length+2];

coins[0] = coins[nums.length+1] = 1;

int dp = new int[nums.length+2][nums.length+2];

for(int i = 0;i解析:本題要求求最大硬幣數量,和藍橋杯的演算法提高組中的最小矩陣乘法非常相似,簡直就是如出一轍。要戳破所有的氣球,沒戳破乙個就可以獲得相鄰的兩個氣球與被戳破的氣球的乘積一開始可能會想要用貪心來做,讓大的數被多乘幾次,但是這樣不能獲得全域性最優,因此還是使用動態規劃,用dp[i][j]來記錄長度為j-i 是從i 到 j 所能獲得硬幣的最大值,然後x來表示從i 到 j 這一段氣球全部被戳破時第x個是最後乙個被戳破的

那麼dp[i][j] 就會等於從i 到 x 的最大值以及從x 到 j 的最大值以及戳破x時的nums[i]*nums[x]*nums[j];

所有dp[i][j] = max(dp[i][j],dp[i][x]+dp[x][j]+nums[i]*nums[x]*nums[j])

ofcourse,還有藍橋杯中的合併石子一題,這三道題思路都很相似,都是通過遍歷從i 到 j 中使得每乙個被遍歷的值當作最後乙個被戳破或者被合併或者被乘的值。

動態規劃學習篇

最近在看牛客網的校招題目,發現很多公司的程式設計題都考了動態規劃裡面的知識,所以,專門抽個時間來學習一下。首先,要用動態規劃演算法,得滿足以下幾個條件 1.最優化原理 最優子結構性質 最優化原理可這樣闡述 乙個最優化策略具有這樣的性質,不論過去狀態和決策如何,對前面的決策所形成的狀態而言,餘下的諸決...

動態規劃答疑篇

1 到底什麼才叫 最優子結構 和動態規劃什麼關係。2 為什麼動態規劃遍歷dp陣列的方式五花八門,有的正著遍歷,有的倒著遍歷,有的斜著遍歷。目錄 最優子結構 是某些問題的一種特定性質,並不是動態規劃問題專有的。也就是說,很多問題其實都具有最優子結構,只是其中大部分不具有重疊子問題,所以我們不把它們歸為...

動態規劃總結

華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 12 7 近期學了幾個動態規劃正好總結一下。裡面不涉及具體問題的具體解法,有問題可以參看我的具體型別的講解部落格。目前所見動態規劃可以劃分為兩類 鏈式和樹形。而且這兩類中的每個節點都是乙個完整的狀態集合。一 鏈式動態規劃 鏈式動態規劃的題...