一.能量項鍊
(這道題和紫書裡的最優矩陣鏈乘很像)
①分析樣例:
4我們把它寫成4個乘法表示式:2 3 5 10
2*3 3*5 5*10 10*2
合併它需要3次乘法:
10*2*3 3*5 5*10 能量+60
10*2*3*5 5*10 能量+10*3*5
10*2*3*5*10 能量+10*5*10
總能量就是710
其實表示式還可以這麼寫
2*3*5*10*2*3*5*10,然後我們要做的就是加括號(回到了最優矩陣鏈乘),
每次算出來的值都加起來,
2*10*3
+10*3*5
+10*5*10
我們設f[ i ][ j ]為從i乘到j得到的最大能量
邊界:f[ i ][ i ]=0,f[ i ][ i+2 ]=data[ i ]*data[ i+1]*data[ i+2 ];
f[ i ][ j ]=max(f[ i ][ k ]+f[ k ][ j ]+data[ i ]*data[ k ]*data[ j ]);
狀態轉移:
for(int l=3;l<=n;l++)for(int i=1,j=i+l;j<=n*2;i++,j++) //
不要把終止條件打成i<=n了,那樣會有一些小區間掃不出來
for(int k=i+1;k)
最後在f[ 1 ][ 1+n ]到f[ n ][ n+n ]裡把ans找出來
是不是覺得有問題,如果資料是這樣的呢
2 2 3
不用擔心:題目說了:第一行是乙個正整數n(4≤n≤100)n(4≤n≤100),表示項鍊上珠子的個數。
所以這麼做可以ac。
二.待更新,樓主要去做別的題了
區間dp的初次體會,超級基礎超級詳細
是對線性區間的最優問題的處理,每乙個當前的區間的狀態都可以由之前的某個區間的狀態來處理即可。寫狀態轉移方程的時候,有人是把最開頭的i當做和之前區間相比多出來的部分,有人把j當做和之前區間相比多出來的部分,兩者都行還是要看個人喜好。dp i j max dp i j dp i k dp k 1 j 流...
線性dp 區間dp
1 尼克的任務 額一道挺水的題,愣是做了幾個小時 動態規劃大致的思路還是找乙個轉移 換個詞就是影響 我們可以明顯看出本題的規則 空暇時,一遇到任務必須挑乙個接 求1 n時間內最大空暇時間 所以將任務排序是必要的,兩個關鍵字 再來想象一下當我做到第i 個任務時,我在 st i st i t i 1 時...
線狀DP及區間DP
這裡我們都用到動態規劃的思想 dynamic programming,簡稱dp。本質就是組合子問題來求解原問題,且對每個子問題只求解一次。一般來說四個步驟 1.刻畫乙個最優結構特徵 2.遞迴的定義最優解值 3.計算最優解的值 4.利用計算出的資訊構造乙個最優解 這邊直接給出 include incl...