• P1063能量项链


    https://www.luogu.org/problemnew/show/P1063

    能量项链这一道题目中每个珠子都有两个值(头标,尾标),我们可以用head[i]表示第i个珠子的头标,tail[i]表示第i个珠子的尾标,则合并i和i+1的珠子所产生的能量总和就是E=head[i]乘tail[i]乘tail[i+1]。与合并石子类似,不一定按照顺序。设s[i][j]为第i合并到第j颗是可以产生的最大能量。
    最后合并时的位置k和k+1,就可以列出转移方程。此时tail head处理在一起成为一个t数组。

    s[j][i]=max(s[j][i],s[j][k]+s[k+1][i]+t[j]*t[k+1]*t[i+1]);
    

    然后剩下的就是初始化和寻找答案了。

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int n,t[300],s[300][300],maxn;
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
        scanf("%d",&t[i]);
        t[i+n]=t[i];
        }
        for(int i=2;i<n*2;i++)
        {
            for(int j=i-1;i-j<n&&j>=1;j--)
            {
                for(int k=j;k<i;k++)
                	s[j][i]=max(s[j][i],s[j][k]+s[k+1][i]+t[j]*t[k+1]*t[i+1]);
                	if(s[j][i]>maxn)maxn=s[j][i];
            }
        } 
        printf("%d",maxn);
        return 0;
    }
    
  • 相关阅读:
    9-15
    9-5
    8-26
    8-24
    7-20
    7-17
    我离职后要干些什么
    6-18
    5-28
    5-20
  • 原文地址:https://www.cnblogs.com/LSWorld/p/partdp1.html
Copyright © 2020-2023  润新知