–首先,我們肯定要把每個珠子都聚合是能量最大的基礎,而對於這個環,我們可以在輸入時預處理成這個樣子:
1 2 3 4 1 2 3
然後發現這個環的所有遍歷情況變得很簡單:以某個為起點,向後取n個就行
–現在,我們只要發現這是個區間dp就行了
f[i][j]表示,從 i 到 j 這個區間內聚合的最大值
對於每個區間,可以從中間的 k 點斷開變為兩段小的,加上聚合這兩段的能量之和
所以狀態轉移方程:f[i][j]=max(f[i][j],f[i][k]+e[i]*e[k+1]*e[j+1]+f[k][j])
完結,✿✿ヽ(°▽°)ノ✿
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn=205;
int n,e[maxn];
long
long f[maxn][maxn];
long
long ans;
int main()
e[0]=e[n];
for(int i=1;i<2*n;i++)}}
for(int i=1;i<=n;i++)
ans=max(ans,f[i][i+n-1]);
cout
0;}
NOIP2006 提高組 能量項鍊
話不多說,上題 該題正解區間dp,什麼是區間dp呢,可以用這道題來來說明 用dp i j 表示從i到j的最大值。和其他題有點不同的是 這道題需要求乙個環的最大值,其他的就是很普通的區間dp了。include using namespace std int a 205 n int f 1005 100...
NOIP2006(能量項鍊)
program energy var n,m longint head,tail array 1.200 of longint head i 與tail i 分別表示第i個珠子的頭標記與第i個珠子的尾標記。f array 1.200,1.200 of longint f i,j 表示從第i個珠子到第...
NOIP 2006 能量項鍊
洛谷傳送門 jdoj傳送門1 jdoj傳送門2 在mars星球上,每個mars人都隨身佩帶著一串能量項鍊。在項鍊上有n顆能量珠。能量珠是一顆有頭標記與尾標記的珠子,這些標記對應著某個正整數。並且,對於相鄰的兩顆珠子,前一顆珠子的尾標記一定等於後一顆珠子的頭標記。因為只有這樣,通過吸盤 吸盤是mars...