zoukankan      html  css  js  c++  java
  • 区间dp体会

    一.能量项链

    https://www.luogu.org/problem/P1063 

    (这道题和紫书里的最优矩阵链乘很像)

    ①分析样例:

    4
    2 3 5 10 

    我们把它写成4个乘法表达式:

    2*3   3*5  5*10 10*2

    合并它需要3次乘法:

    10*2*3 3*5 5*10   能量+60

    10*2*3*5  5*10     能量+10*3*5

    10*2*3*5*10         能量+10*5*10

    总能量就是710

    其实表达式还可以这么写

    2*3*5*10*2*3*5*10,然后我们要做的就是加括号(回到了最优矩阵链乘),

    每次算出来的值都加起来,

       2*10*3

     +10*3*5

     +10*5*10

    我们设f[ i ][ j ]为从i乘到j得到的最大能量

    边界:f[ i ][ i ]=0,f[ i ][ i+2 ]=data[ i ]*data[ i+1]*data[ i+2 ]; 

    f[ i ][ j ]=max(f[ i ][ k ]+f[ k ][ j ]+data[ i ]*data[ k ]*data[ j ]);

      状态转移:

    for(int l=3;l<=n;l++)
           for(int i=1,j=i+l;j<=n*2;i++,j++) //不要把终止条件打成i<=n了,那样会有一些小区间扫不出来 
             for(int k=i+1;k<j;k++) 
             {
                 f[i][j]=max((f[i][k]+f[k][j])+d[i]*d[k]*d[j],f[i][j]);
             }

    最后在f[ 1 ][ 1+n ]到f[ n ][ n+n ]里把ans找出来

    (至于为什么是+n,楼主觉得是因为要进行n-1次运算,如果你有更好的解释,请留言

    是不是觉得有问题,如果数据是这样的呢

    2 3

    不用担心:题目说了:第一行是一个正整数N(4≤N≤100)N(4N100),表示项链上珠子的个数。

    所以这么做可以ac。

    二.待更新,楼主要去做别的题了

  • 相关阅读:
    mysql 数据迁移方案
    tomcat:run 指定端口号
    idea open gradle project
    tomcat:run命令执行端口号
    域名代理
    stackoverflow慢问题
    chrome 添加 vue tools
    深度学习——结构化机器学习项目(学习策略2)[9]
    深度学习——超参数调试[7]
    深度学习——优化算法[6]
  • 原文地址:https://www.cnblogs.com/Neptune0/p/11845093.html
Copyright © 2011-2022 走看看