首页 > 其他 > 详细

能量项链

时间:2020-06-06 21:20:26      阅读:60      评论:0      收藏:0      [点我收藏+]
#include <bits/stdc++.h>
using namespace std;
//算法提高,能量项链,就是可以转圈的矩阵连乘问题
//把1->n扩展为1->n->n+1->2*n,然后对其进行dp,这样就循环起来了
int dp[2000][2000],n,a[1000],ans=0;//用i表示左维度,i+1表示右维度
int main() {
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    a[n+1]=a[1];
    memset(dp,0, sizeof(dp));
    //[,]
    //注意以l开始循环,如果以i的话,会导致直接算1->n,就错了
    for(int l=1;l<=n;l++){
        for(int i=1;i<=2*n-l+1;i++){
            int j=l+i-1;
            for(int k=i;k<j;k++){
                dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+a[i>n?i-n:i]*a[j+1>n?j+1-n:j+1]*a[k+1>n?k+1-n:k+1]);
            }
            ans=max(ans,dp[i][j]);
        }
    }
    cout<<ans<<endl;
    return 0;
}

 

能量项链

原文:https://www.cnblogs.com/MorrowWind/p/13056323.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!