P1063 [NOIP2006 提高组] 能量项链

题目:

https://www.luogu.com.cn/problem/P1063

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<queue>
using namespace std;
typedef pair<int ,int > p;
typedef long long ll;
int t,m;
int r[204];
int s[204];
int dp[204][204];
int d[204][204];
struct node
{
    int t,w;
}a[204];
int main()
{
    int n;
    scanf("%d",&n);
     for(int i=1;i<=n;i++)
    scanf("%d",&r[i]);
    for(int i=n+1;i<=n+n;i++)
        r[i]=r[i-n];
  //把环拆成链

    for(int len=2;len<=n;len++)
    {
        for(int i=1,j=i+len-1;i<=n+n&&j<n+n;i++,j=i+len-1)
        {
            for(int k=i;k<j;k++)
            {
                    dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+r[i]*r[k+1]*r[j+1]);
              //两个区间一个尾巴是r[k+1],一个头是r[k+1]
            }

        }
    }
   int mmax=0;

   for(int i=1;i+n-1<=n+n;i++)
   {
       mmax=max(mmax,dp[i][i+n-1]);
   }
      printf("%d\n",mmax);

}

 

posted @ 2021-07-29 14:48  废柴废柴少女  阅读(33)  评论(0)    收藏  举报