动态规划在编程中有着广泛的应用,对于某些问题我们可以通过动态规划显著的降低程序的时间复杂度。本质上动态规划并不是一种算法,而是解决一类问题的思想。本篇博客通过一些非常简单而又经典的问题(比如数塔、0-1背包、完全背包、走楼梯问题、最长公共子序列等)来帮助大家理解动态规划的一般套路。欢迎探讨,如有错误... ...
分类:
编程语言 时间:
2019-06-08 19:09:40
阅读次数:
190
题意:有2个人玩游戏,他们都有个初始值a和b, 游戏进行t轮, 每次可以选择加上一个[-k, +k]之间的数字,问有多少种方案a的和严格大于b的和。 思路:如果不考虑多于这个条件,只是询问有多少种方案的化,这是一个数塔模型的DP, 设dp[i][j]为到i位置,前面的数的和为j的方案数,直接转移即可 ...
分类:
其他好文 时间:
2019-04-23 19:10:40
阅读次数:
107
"$problem$" 与 "这题" 灰常的相似 然后内存可能过大 开个滚动数组 因为数塔问题总是 只需要上面一行的两个状态(这题就是数塔问题) 下面的代码与原题不符。(原题要输出路径)~~想抄的可以走了~~ 输出路径只需要数组记录一下就好了。 ~~~ ifdef Dubug endif inclu ...
分类:
其他好文 时间:
2019-03-31 13:48:43
阅读次数:
190
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176 思路: 这道题不复杂,很明显是个dp题,数据比较大,搜索应该会超时,想到如何初始化,注意细节就差不多了。定义dp数组,边输入边初始化,dp[i][j]表示第i秒j处的掉落馅饼个数。dp过程从最后一 ...
分类:
其他好文 时间:
2019-02-18 01:15:51
阅读次数:
174
在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 已经告诉你了,这是个DP的题目,你能AC吗? Input 输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一 ...
分类:
其他好文 时间:
2019-02-09 10:30:02
阅读次数:
201
动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。在面试笔试中动态规划也是经常作为考题出现,其中较为简单的DP题目我们应该有百分之百的把握顺利解决才可以。一、动态规划定义动态规划实际上是一类题目的总称,并不是指某 ...
分类:
其他好文 时间:
2019-02-06 23:52:07
阅读次数:
177
题目大意:给定一个四个柱子的汉诺塔,N 个盘子,求最少多少步移动到另一个柱子上。 题解:$f[n]=min(2 f[i]+d[n i])$,其中 $d[i]$ 为汉诺三塔最小移动次数。M 塔同理。 代码如下 cpp include using namespace std; const int max ...
分类:
其他好文 时间:
2019-01-21 20:08:02
阅读次数:
159
很经典的DP题了,数塔问题。如果从上往下处理边界比较麻烦,如果从下往上看就会简单很多。 分析:1.我们要找到最底层到最高层一条路,使得和最大。显然,如果我们从上往下,那么转移条件就是dp[i][j] = max(dp[i - 1][j - 1], dp[i - 1][j]) + triangle[i ...
分类:
其他好文 时间:
2018-12-26 15:53:10
阅读次数:
131
转自:https://www.cnblogs.com/zyx1301691180/p/5727918.html HDU 2084 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点 ...
分类:
其他好文 时间:
2018-12-19 17:05:39
阅读次数:
197
在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 已经告诉你了,这是个DP的题目,你能AC吗? Input输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个 ...
分类:
其他好文 时间:
2018-12-17 21:08:09
阅读次数:
187