摘要

题目链接 难度等级 完成状态 完成分数 最后编辑时间 需要注意
能量项链 ★☆☆☆☆ 答案正确 100 2014/11/26 17:07:33

题意

环形石子归并问题。

题解

石子归并的变题了,环形石子归并其实只要复制一遍接在后面,按照石子归并做就是了,例如:

1 2 3 4 5  ->  1 2 3 4 5 1 2 3 4

DP方程也是类似的:

    dp[i][j]=max{dp[i][k-1]+dp[k][j]+h[j+1]*h[i]*h[k]};

代码

1154.cpp代码已折叠
展开折叠内容
#include<cstdio>
#include<climits>
#include<algorithm>
int dp[5000][5000]={},n,h[5000]={},sum[5000]={},n0,Ans=0;
int main()
{
    scanf("%d",&n0);
    for (int i=1;i<=n0;i++)
    {
        scanf("%d",&h[i]);
        h[i+n0]=h[i];
    }
    n=(n0<<1)-1;

    for (int len=2;len<=n0;len++)
        for (int i=1;i<=n-len+1;i++)
        {
            int j=i+len-1;
            for (int k=i+1;k<=j;++k)
                if (dp[i][k-1]+dp[k][j]+h[j+1]*h[i]*h[k]>dp[i][j])
                    dp[i][j]=dp[i][k-1]+dp[k][j]+h[j+1]*h[i]*h[k];
        }
    for(int i=1;i<=n0;++i)
        Ans=std::max(Ans,dp[i][i+n0-1]);
    printf("%d",Ans);
    return 0;
}

著作权声明[编辑]

关于[编辑]