區(qū)間DP大法。i 到 j范圍內(nèi)。。
https://www.youtube.com/watch?v=Ci39lcoLbyw
8月30日。。。終于算是理解了這個(gè)究極DP題。。。太變態(tài)了
類似題: 石子排序。 區(qū)間DP經(jīng)典題。
https://mp.weixin.qq.com/s?__biz=MzA5MzE4MjgyMw==&mid=400674993&idx=1&sn=8c3f329c2b37b14a877b5fc911ee20d2&mpshare=1&scene=1&srcid=0317iP3nlANyWGEfYZFqPdRB&key=58168eb9596d1ecabc3fac3215d2e1600ddcde51396c7e580ce94e8712a041c038315ca896df410818b397af4d0456ed323cf0ec1a61b3035f93321e326a14fa513bd03208dfb49fdfc7b133122ca96b&ascene=0&uin=MTUyMzg3NjAwMA%3D%3D&devicetype=iMac+MacBookAir7%2C1+OSX+OSX+10.12.3+build(16D32)&version=12020010&nettype=WIFI&fontScale=100&pass_ticket=0AiIToHJN8yqpuqRAsA5PaaQMJr8KtvlnZ2EqkX0zx%2BEZweRvHKyF%2ByjmycpUbVn
“本題中分析的過(guò)程很重要,本題是區(qū)間DP的好題,首先會(huì)考慮暴力的方法,但是時(shí)間復(fù)雜度特別高。如果面試者做過(guò)基礎(chǔ)題目Stone Game 并且能夠follow up想到這道題區(qū)間的性質(zhì),發(fā)現(xiàn)兩題非常類似的話,用n^3的dp算法解決,那么就可以達(dá)到hire的程度” ?From 9章算法
這尼瑪。。。還是得做過(guò)Stone Game。
這邊這個(gè)分析出subproblem的思路很好。
看起來(lái)九章算法很喜歡DP結(jié)合著recursion用。可以可以很牛逼。大概看懂stone這題的邏輯了。 就是for loop,但是把石頭從0 到n 分成了3個(gè)區(qū)間。 左半部分區(qū)間,中間,右半部分區(qū)間。 然后求出各個(gè)區(qū)間的最優(yōu)解。 不過(guò)for 循環(huán)到后面, k < end的時(shí)候。 left還是包含了從0到n的全部區(qū)間。 右邊到最后就啥也不包括了。 sum這個(gè)array是這樣:
sum[0] =0. sum[1] = 第一個(gè)石子堆里的數(shù)量。 sum[2]=第一個(gè)石子堆+第二個(gè)石子堆的數(shù)量。。。。sum[end+1] = 所有石子堆的總石子。這個(gè)sum是我一直沒搞懂的:比如m(1,3)=m(1,1)+m(2,3)+sum(1,2) 為什么是這樣? 假設(shè)一共3個(gè)石頭堆,第一次我們把石頭堆2和石頭堆3合并了 這倆一共20個(gè)石頭。 now,我們要把2&3 合體堆與 石頭堆1合并。 假設(shè)石頭堆1 有5個(gè)石頭。那這一輪=20+5=25個(gè)石頭。 重點(diǎn)!我們還得把第一輪的得分20加上來(lái)!所以sum是記錄之前得分的東西!所以所謂區(qū)間DP就是從i到j(luò)這個(gè)區(qū)間的 solution。
basketwang:https://www.youtube.com/watch?v=Ci39lcoLbyw&t=437s
state的定義最關(guān)鍵:是一個(gè)transition DP state. left, ......, i, ...., right.
DP[left][i] 表示戳破left到i中間的氣球最大得分。不包括left, 和i. ?之前我做的時(shí)候,道理我都懂。但是就是不知道怎么知道 當(dāng)前i 氣球隔壁left, right相鄰沒被戳破的是誰(shuí)。
distance也是一個(gè)超級(jí)重要的。是left 和 right 之間的距離。比如 2 3 4我們唯一能做的是把3戳破。