E30 区间DP P1063 [NOIP 2006 提高组] 能量项链

E30 区间DP 能量项链_哔哩哔哩_bilibili

 

P1063 [NOIP 2006 提高组] 能量项链 - 洛谷

// 区间DP O(n^3)
#include <bits/stdc++.h>
using namespace std;

const int N=210;
int n, a[N];  //a[i]为第i颗珠子的头标记 
int f[N][N];  //f[i,j]表示合并[i,j]得到的能量最大值 

int main(){
  cin>>n;
  for(int i=1; i<=n; i++)cin>>a[i], a[i+n]=a[i];
  
  for(int len=3; len<=n+1; len++)
  for(int i=1,j=i+len-1; j<=2*n; i++,j++)
  for(int k=i+1 ;k<j; k++)
    f[i][j]=max(f[i][j],f[i][k]+f[k][j]+a[i]*a[k]*a[j]);
  
  int ans=0;
  for(int i=1;i<=n;i++) ans=max(ans,f[i][i+n]); //f[1,n+1]...f[n,2n]
  cout<<ans;
}

 

posted @ 2023-04-10 10:16  董晓  阅读(591)  评论(0)    收藏  举报