P1063-能量項鍊【區間dp】
阿新 • • 發佈:2018-12-10
正題
題目大意
有n個珠子組成環,每顆珠子的頭尾標記連線,將兩顆珠子合併會產生的能量,產生一顆頭標記為頭珠子的頭標記,尾標記為尾珠子的尾標記。 求所以珠子合併最大能量
解題思路
裸的區間dp
code
#include<cstdio>
#include<algorithm>
using namespace std;
int n,h[210],t[210],maxs,f[210][210];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&h[i]);
h[i+n]=t[i+n-1]=t[i-1]=h[i];
}
t[2*n]=h[1];
for(int i=2;i<=n;i++)
for(int l=1;l<=2*n-i+1;l++)
{
int r=l+i-1;
for(int k=l;k<r;k++)
{
f[l][r]=max(f[l][r],f[l][k]+f[k+1][r]+h[l]*t[k]*t[r]);
//動態轉移
}
if(i==n) maxs=max(maxs,f[l][r]);
}
printf("%d",maxs);
}