• 动态规划


     本题是最简单的一类动态规划,动态规划的基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从子问题的解得到原问题的解。 假设本题忽略马的存在,可以把答案看成一个二维数组,f[i][j]代表当B在i,j时的方法数,显然,f[i][j]=f[i][j-1]+f[i][j-1] ,所以我们想做的就是求出这个二维数组里  (i ,j)处的值,而(0,1)和(1,0)处的值是已知的,所以我们可以一步步递推出(i,j)

    需要注意的是,本题中把想到求 f[i][j]  是很自然的,但是在其它题中并没那么显然。

    这道题不像上题那么显然。 

    假设(t,m)代表在t时间里收集前m种草药得到的总价值,当t=T,m=M时显然就是本问题的解。这道题的状态转移方程:    分别是得到最大价值时采没采第i种药。

    然后本题也就变成了一个求二维数组在(t,m)处的值的问题。     找出状态转移方程是所有动态规划里最关键的一步,分析最终的解=?  可由哪些小问题构成

     

     这道题和上题类似。令(V ,n)为容量为V时,考虑前n种物品得到的最大体积。然后再用V-it就可以了。

    最大字段和

     这道题没那么直接,如果直接令  f(i)为序列的前i个元素里的最大子段和是不行的,因为如果可以的话,那么时间复杂度就是O(n)了,这太小了,不现实。

    但我们可以令 f(i)为包含第i个元素的最大子段和。因为和最大的子段的最后一个元素必然是1-n中的某个元素,所以我们从1-n遍历一下,找到最大的f(i)就是最后的结果。

  • 相关阅读:
    abstract关键字
    方法重写
    对象初始化过程
    访问修饰符
    super关键字
    继承
    转发和重定向的区别
    tomcat中乱码问题解决
    jsp执行过程
    web程序常见错误及解决方法
  • 原文地址:https://www.cnblogs.com/lau1997/p/12442831.html
Copyright © 2020-2023  润新知