[蓝桥杯][算法提高]能量项链(区间dp)
題目描述
在Mars星球上,每個Mars人都隨身佩帶著一串能量項鏈。在項鏈上有 N顆能量珠。能量珠是一顆有頭標(biāo)記與尾標(biāo)記的珠子,這些標(biāo)記對應(yīng)著某個正整數(shù)。并且,對于相鄰的兩顆珠子,前一顆珠子的尾標(biāo)記一定等于后一顆珠子的頭標(biāo) 記。因為只有這樣,通過吸盤(吸盤是Mars人吸收能量的一種器官)的作用,這兩顆珠子才能聚合成一顆珠子,同時釋放出可以被吸盤吸收的能量。如果前一顆 能量珠的頭標(biāo)記為m,尾標(biāo)記為r,后一顆能量珠的頭標(biāo)記為r,尾標(biāo)記為n,則聚合后釋放的能量為mrn(Mars單位),新產(chǎn)生的珠子的頭標(biāo)記為m, 尾標(biāo)記為n。
需要時,Mars人就用吸盤夾住相鄰的兩顆珠子,通過聚合得到能量,直到項鏈上只剩下一顆珠子為止。顯然,不同的聚合順序得到的總能量是不同的,請你設(shè)計一個聚合順序,使一串項鏈釋放出的總能量最大。
例如:設(shè)N=4,4顆珠子的頭標(biāo)記與尾標(biāo)記依次為(2,3) (3,5) (5,10) (10,2)。我們用記號◎表示兩顆珠子的聚合操作,(j◎k)表示第j,k兩顆珠子聚合后所釋放的能量。則第4、1兩顆珠子聚合后釋放的能量為:
(4◎1)=1023=60。
這一串項鏈可以得到最優(yōu)值的一個聚合順序所釋放的總能量為
((4◎1)◎2)◎3)=1023+1035+10510=710。
輸入
第一行是一個正整數(shù)N(4≤N≤100),表示項鏈上珠子的個數(shù)。第二行 是N個用空格隔開的正整數(shù),所有的數(shù)均不超過1000。第i個數(shù)為第i顆珠子的頭標(biāo)記(1≤i≤N),當(dāng)i〈N時,第i顆珠子的尾標(biāo)記應(yīng)該等于第i+1顆 珠子的頭標(biāo)記。第N顆珠子的尾標(biāo)記應(yīng)該等于第1顆珠子的頭標(biāo)記。
至于珠子的順序,你可以這樣確定:將項鏈放到桌面上,不要出現(xiàn)交叉,隨意指定第一顆珠子,然后按順時針方向確定其他珠子的順序。
輸出
只有一行,是一個正整數(shù)E(E≤2.1*10^9),為一個最優(yōu)聚合順序所釋放的總能量
樣例輸入
4
2 3 5 10
樣例輸出
710
思路:區(qū)間dp
狀態(tài)轉(zhuǎn)移方程:dp[i][j]=max(dp[i][j],dp[i][k]+dp[(k+1)%n][j]+(ll)a[i]*(ll)a[(k+1)%n] *(ll)a[(j+1) %n]);
網(wǎng)上有很多人說找到最小的,然后就確定了,直接做就可以了。但是那樣的話,前面的對后面是有影響的,因此那樣貪心是不對的。正解為區(qū)間dp。
代碼如下:
努力加油a啊,(o)/~
總結(jié)
以上是生活随笔為你收集整理的[蓝桥杯][算法提高]能量项链(区间dp)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [蓝桥杯][2013年第四届真题]买不到
- 下一篇: [蓝桥杯][算法提高VIP]合并石子(区