312 戳氣球 動態規劃

2021-10-08 07:14:37 字數 1064 閱讀 7122

難度:困難

2020/7/19每日一題打卡

題目描述

解題思路

今天是抄答案而且還抄的迷迷糊糊的一天

知道要這樣做,但是仔細去想為什麼是這樣的,又說不出個所以然

首先在陣列左右兩端新增虛擬氣球節點,是不能被戳破的,這樣能方便處理邊界,而且保證總是有三個氣球相乘。

然後注意動態規劃的順序,要從區間右邊開始,逆序,因為前面的要用到後面的子狀態

然後k表示最後乙個戳破的氣球,這樣會好理解很多,是最後乙個戳破的,左邊和右邊的結果都有了,直接dp[i][j] = math.max(dp[i][j], dp[i][k]+dp[k][j]+nums1[i]*nums1[k]*nums1[j]);

/*

* 312. 戳氣球

* 2020/7/19每日一題 難度:困難 動態規劃

* dp[i][j] : 先戳破[i, k - 1]和[k + 1, j]的氣球,最後戳破第k個氣球獲得轉移方程。

*/public

intmaxcoins

(int

nums)

nums1[0]

=1; nums1[n+1]

=1;int

dp =

newint

[n+2

][n+2]

;//開始dp:i為begin,j為end,k為在i、j區間劃分子問題時的邊界

leetcode 312 戳氣球(動態規劃)

有 n 個氣球,編號為0 到 n 1,每個氣球上都標有乙個數字,這些數字存在陣列nums中。現在要求你戳破所有的氣球。每當你戳破乙個氣球i時,你可以獲得nums left nums i nums right 個硬幣。這裡的left和right代表和i相鄰的兩個氣球的序號。注意當你戳破了氣球 i 後,...

leetcode 312 戳氣球(動態規劃)

題目描述 有 n 個氣球,編號為0 到 n 1,每個氣球上都標有乙個數字,這些數字存在陣列 nums 中。現在要求你戳破所有的氣球。戳破第 i 個氣球,你可以獲得 nums i 1 nums i nums i 1 枚硬幣。這裡的 i 1 和 i 1 代表和 i 相鄰的兩個氣球的序號。如果 i 1或 ...

LeetCode312 戳氣球(難)

看了大概7 8分鐘,沒有思路。自己暴力的想法是n的階乘級別,也難寫。直接看題解,很巧妙,很驚嘆。參考講解 經典動態規劃 戳氣球 直接上 class solution dp i j 表示搓破 i,j 之間的氣球獲得的最大硬幣數量 邊界條件 dp i i 0,它們之間沒有氣球,dp i i 1 0 它們...