正题
评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P1063
题目大意
有n个珠子组成环,每颗珠子的头尾标记连接,将两颗珠子合并会产生headi∗headj∗tailjheadi∗headj∗tailj的能量,产生一颗头标记为头珠子的头标记,尾标记为尾珠子的尾标记。
求所以珠子合并最大能量
解题思路
裸的区间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);
}