zoukankan      html  css  js  c++  java
  • 洛谷P1063能量项链题解

    $题目$

    不得不说,最近我特别爱刷这种区间DP题,因为这个跟其他的DP有些不一样的地方,主要是有一定的套路,就是通过小区间的状态更新大区间,从而得到原题给定区间的最优解。

    $但是$ 这个题应该跟$石子合并$差不多,不同的几点就是一个是小区间加小区间,一个是小区间$*$小区间。实际上本质都是一样的,但是要注意一些坑。$

    $坑点$:

    比如说首先要断环为链, 这个比较简单,然后就是还要注意区间的左右端点和断点判断上的问题。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    int n,e[300],s[300][300],maxn=-1;
    int main(){
        cin>>n;
        for(int i=1;i<=n;i++){cin>>e[i];e[i+n]=e[i];}
        //珠子由环拆分为链,重复存储一遍
        for(int i=2;i<2*n;i++){
            for(int j=i-1;i-j<n&&j>=1;j--){//从i开始向前推
                for(int k=j;k<i;k++)//k是项链的左右区间的断点 
                s[j][i]=max(s[j][i],s[j][k]+s[k+1][i]+e[j]*e[k+1]*e[i+1]);
                //状态转移方程:max(原来能量,左区间能量+右区间能量+合并后生成能量)  
                if(s[j][i]>maxn)maxn=s[j][i];//求最大值 
            }
        } 
        cout<<maxn;
        return 0;
    }
  • 相关阅读:
    数量关系
    笨办法学python问题记录
    CSS布局与定位
    python学习 预备篇
    基于hexo搭建个人博客
    CSS常用样式
    计算机组成原理(期末篇)
    Codeblock错误提示栏隐藏
    Markdown标记语言
    笨办法学python(不同版本的python代码差别)
  • 原文地址:https://www.cnblogs.com/liuwenyao/p/9795801.html
Copyright © 2011-2022 走看看