区间(环形)dp

Posted Hell0er

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区间(环形)dp相关的知识,希望对你有一定的参考价值。

 

 #include <iostream>
 
 using namespace std;
 
 const int MAXN=110;
 
 int n;
 int a[MAXN*2];
 int dp[MAXN*2][MAXN*2];
 
 int main()
 {
     cin>>n;
     for (int i=1;i<=n;i++)
     {
         cin>>a[i];
         a[i+n]=a[i];
     }
 
     for (int len=2;len<=n;len++)   //枚举合并长度
     {
         for (int i=1;i+len-1<=2*n;i++)   //枚举左端点
         {
             int j=i+len-1;   //右端点
             for (int k=i;k<=j-1;k++)   //枚举间断点
             {
                 dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+a[i]*a[k+1]*a[j+1]);
             }
         }
     }
 
     int ans=0;
     for (int i=1;i<=n;i++)
     {
         ans=max(ans,dp[i][i+n-1]);
     }
     cout<<ans<<endl;
 
     return 0;
 }

 

以上是关于区间(环形)dp的主要内容,如果未能解决你的问题,请参考以下文章

区间(环形)dp

区间dp与环形dp

poj1179 环形+区间dp

转载+删改:算法讲解之Dynamic Programing —— 区间DP [变形:环形DP]

codevs1154能量项链(环形dp,区间dp)

dp乱写1:环形区间dp(数字游戏)