區間DP 能量項鍊

2021-10-09 05:27:43 字數 1188 閱讀 6959

在 mars 星球上,每個 mars 人都隨身佩帶著一串能量項鍊。在項鍊上有 n 顆能量珠。能量珠是一顆有頭標記和尾標記的珠子,這些標記對應著某個正整數。並且,對於相鄰的兩顆珠子,前一顆珠子的尾標記必定等於後一顆珠子的頭標記。因為只有這樣,通過吸盤——mars 人吸收能量的器官的作用,這兩顆珠子才能聚合成一顆珠子,同時釋放出可被吸盤吸收的能量。如果一顆能量珠頭標記為 m ,尾標記為 r,後一顆能量珠頭標記為 r,尾標記為 n,則聚合後釋放出 m×r×n mars單位的能量,新珠子頭標記為 m,尾標記為 n。

當需要時,mars 人就用吸盤夾住相鄰的兩顆珠子,通過聚合得到能量,直到項鍊上只剩下一顆珠子為止。顯然,不同的聚合順序得到的總能量是不一樣的。請設計乙個聚合順序使得一串珠子聚合後釋放出的總能量最大。例如,設 n=4,四顆珠子頭標記與尾標記分別為 (2,3),(3,5),(5,10),(10,2)。我們用記號 ⨂ 表示兩顆珠子的聚合操作,(j⨂kj⨂k) 表示 j,k 兩顆珠子聚合後釋放出的能量,則4,1兩顆珠子聚合後所釋放的能量為(4⨂1)=10×2×3=60,這一串項鍊可以得到最優值的乙個聚合順序所釋放出的總能量為(((4⨂1)⨂2)⨂3)=10×2×3+10×3×5+10×5×10=710 現在給你一串項鍊,項鍊上有 n 顆珠子,相鄰兩顆珠子可以合併成乙個,合併同時會放出一定的能量,不同珠子合併放出能量不相同,請問按怎樣的次序合併才能使得釋放的能量最多?

區間dp典型題目。

範圍整對就行了。

#include

#define ll long long

using

namespace std;

const

int n =

1e5+10;

int n,a[

255]

,f[255][

255]

,ans;

intmain()

for(

int d=

2; d<=

2*n; d++

)for

(int i=

1; i<=

2*n-d+

1; i++

)for

(int i=

1; i<=n; i++

) ans=

max(ans,f[i]

[i+n-1]

);cout << ans

}

區間dp 能量項鍊

在mars星球上,每個mars人都隨身佩帶著一串能量項鍊。在項鍊上有n顆能量珠。能量珠是一顆有頭標記與尾標記的珠子,這些標記對應著某個正整數。並且,對於相鄰的兩顆珠子,前一顆珠子的尾標記一定等於後一顆珠子的頭標記。因為只有這樣,通過吸盤 吸盤是mars人吸收能量的一種器官 的作用,這兩顆珠子才能聚合...

區間dp(能量項鍊)

題目大意 在mars星球上,每個mars人都隨身佩帶著一串能量項鍊。在項鍊上有n顆能量珠。能量珠是一顆有頭標記與尾標記的珠子,這些標記對應著某個正整數。並且,對於相鄰的兩顆珠子,前一顆珠子的尾標記一定等於後一顆珠子的頭標記。因為只有這樣,通過吸盤 吸盤是mars人吸收能量的一種器官 的作用,這兩顆珠...

能量項鍊 區間DP

p1056能量項鍊 noip2006 提高組 第一道 在mars星球上,每個mars人都隨身佩帶著一串能量項鍊。在項鍊上有n顆能量珠。能量珠是一顆有頭標記與尾標記的珠子,這些標記對應著某個正整數。並且,對於相鄰的兩顆珠子,前一顆珠子的尾標記一定等於後一顆珠子的頭標記。因為只有這樣,通過吸盤 吸盤是m...