code1154 能量项链

d[l][i]表示:从第i个珠子开始,连续l个珠子合并后释放的最大能量

状态转移方程d[l][i] = d[j][i] + d[l-j][i+j] + w[i]*w[i+j]*w[i+l],j从1到l-1

注意实际操作时i+j和i+l要mod n.

 

代码:

#include<iostream>
#include<cstring>
using namespace std;

int n;
int w[1005];
int dp[1005][1005];

int main(){
    memset(dp,0,sizeof(dp));
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>w[i];
    }
    for(int len=2;len<=n;len++){
        for(int i=0;i<n;i++){
            for(int j=1;j<=len-1;j++){
                int temp=dp[j][i]+dp[len-j][(i+j)%n]+w[i]*w[(i+j)%n]*w[(i+len)%n];
                dp[len][i]=max(dp[len][i],temp);
            }
        }
    }
    int ans=0;
    for(int i=0;i<n;i++){
        ans=max(ans,dp[n][i]);
    }
    cout<<ans<<endl;
}

 

posted @ 2016-06-21 13:58  FuTaimeng  阅读(210)  评论(0编辑  收藏  举报