zoukankan      html  css  js  c++  java
  • 洛谷P1063

    因为这是一种中链式dp,为了方便起见,将环状的项链平坦开呈链状,并且在末尾在延续一段,这样可以找到所有可能的相连情况

    设f[i][j]为从i到j所能获得的最大值,因此从l枚举到r,求出最大值

    #include<bits/stdc++.h>
    
    using namespace std;
    int n,f[210][210],a[110],ans;

    int main(){
      scanf(
    "%d",&n);
      
    for(int i=1;i<=n;i++)scanf("%d",&a[i]),a[i+n]=a[i];//在末尾多加一段
      for(int i=2;i<n*2;i++){//枚举末尾
        for(int j=1;j+i-1<2*n;j++){//枚举起点
      int r=j+i-1;
      
    for(int k=j;k<r;k++)//每个点都合并试试
            f[j][r]=max(f[j][r],f[j][k]+f[k+1][r]+a[j]*a[k+1]*a[r+1]);

      }
      }
      
    for(int i=1;i<=n;i++)ans=max(ans,f[i][i+n-1]);//跑一遍求出最大值
      printf("%d",ans);

      
    return 0; }
  • 相关阅读:
    记一次给自己的本子更换一个SSD盘
    喜欢的电影
    一个人没有出息的9大根源
    经典思维模式
    Linux基础入门教程
    XML
    UML
    Linux最常用的基础命令
    IP地址
    http协议
  • 原文地址:https://www.cnblogs.com/heqingyu/p/7682569.html
Copyright © 2011-2022 走看看