随笔分类 -  动态规划

摘要:题目其实很简单,就是你找到两个字符串的最大公共子序列,然后把两个字符串都输入,但是最大公共子序列只输出一次 这道题初看其实很难理解,搞明白了之后我画了一张图,有了它这道题小学生都能做出来啦! 比方说你已经找到了图中的黑线连接的关系(最大公共子序列),那么已按照图中的圆圈圈起来的顺序输出这些字符就好啦 阅读全文
posted @ 2018-04-12 22:07 柳暗花明_liu 阅读(171) 评论(0) 推荐(0)
摘要:题目链接 给你若干种面值的硬币,每种硬币有多个,给你一个数字m,问你能用给你的硬币组合出和为1-m之间的几种情况,例如1个两元硬币 2个一元硬币 m=3时 就能组合出来1 2 3 答案就是三 ;m=4时,答案就是4 ;m=5时答案还是4。(难得我解释了一次题意,hh) 如果会01背包与完全背包,多重 阅读全文
posted @ 2018-04-12 16:47 柳暗花明_liu 阅读(173) 评论(0) 推荐(0)
摘要:老罗课其实讲得很好,真的,老罗写书的话我可能真的会买 找出状态转移方程然后打表即可 阅读全文
posted @ 2018-04-11 19:00 柳暗花明_liu 阅读(222) 评论(0) 推荐(0)
摘要:二维数组 hdu2602 #include <iostream> #include <cstring> using namespace std; const int maxn=4000; int dp[13000]; int d; int w; int n,wl; int main(){ memse 阅读全文
posted @ 2018-04-11 16:57 柳暗花明_liu 阅读(154) 评论(0) 推荐(0)
摘要:转载自:地址 滚动数组的作用在于优化空间,主要应用在递推或动态规划中(如01背包问题)。因为DP题目是一个自底向上的扩展过程,我们常常需要用到的是连续的解,前面的解往往可以舍去。所以用滚动数组优化是很有效的。利用滚动数组的话在N很大的情况下可以达到压缩存储的作用。 一个简单的例子: 斐波那契数列: 阅读全文
posted @ 2018-03-22 20:08 柳暗花明_liu 阅读(589) 评论(0) 推荐(0)
摘要:等过一阵把思路忘记掉,再回来写,哈哈哈 阅读全文
posted @ 2018-03-04 15:20 柳暗花明_liu 阅读(238) 评论(0) 推荐(0)
摘要:题意介绍 初看这道题,想了想没头绪,感觉又要被虐了,按照《算法基础》郭老师的讲解,勉强接受了这个奇怪的状态转移方程,但是还是感觉很吃力,照着视频写了一遍之后,又去网上看了看别人的代码,我的天哪,比郭老师的简洁多了!然后自己独立写了一遍,终于感觉好多了。原本感觉无从下手的难题,最后自己能够独立写出来, 阅读全文
posted @ 2018-03-03 18:04 柳暗花明_liu 阅读(176) 评论(0) 推荐(0)
摘要:题意描述 有三种解法 n^2 和两个n*log(n) 一个讲得很好的博客:地址 n^2的,动态规划: 动归问题,首先很容易认为这道题的子问题就是,求前n个数字序列的解,这样的错误之处在于,“状态具有后效性”,前n个数字序列的解可能有多种,每一种可能结尾数字不一样,这样对后面的解就有了影响(后效性) 阅读全文
posted @ 2018-03-03 11:18 柳暗花明_liu 阅读(157) 评论(0) 推荐(0)
摘要:题目描述 稍微难一点的DP,用到了优先队列来简化代码,每个点有几只奶牛用了很巧的方法处理 算法: 递推式子是:f[i+2]=f[i]+1; ( i+2-2b<=i<=i+2-2a ) f[i]即i点的解 先计算出2a-2b这一段的f[i],然后将节点小于等于i+2-2a处的f[i]值存入优先队列,在 阅读全文
posted @ 2018-03-02 18:31 柳暗花明_liu 阅读(130) 评论(0) 推荐(0)
摘要:题目描述 分析: 代码: 阅读全文
posted @ 2018-02-27 18:41 柳暗花明_liu 阅读(161) 评论(0) 推荐(0)
摘要:递归算法就是通过解决同一问题的一个或多个更小的实例来最终解决一个大问题的算法。为了在C语言中实现递归算法,常常使用递归函数,也就是说能调用自身的函数。递归程序的基本特征:它调用自身(参数的值更小),具有终止条件,可以直接计算其结果。 在使用递归程序时,我们需要考虑编程环境必须能够保持一个其大小与递归 阅读全文
posted @ 2018-02-27 13:13 柳暗花明_liu 阅读(1995) 评论(0) 推荐(0)
摘要:题意如标题所示,求数字串的子序列中,和最大的那个子序列的和。测试数据规模为100000。 首先从DP的角度考虑 状态:i(数组下标) 状态转移方程: 注:加上“等于零”是为了得到有多解时,的第一个解。(原谅我的字 -_-) 初始边界状态极其值:dp[0]。 最大连续序列和:定义一个max_sum=d 阅读全文
posted @ 2018-02-26 21:19 柳暗花明_liu 阅读(310) 评论(0) 推荐(0)
摘要:题干在最后。 这道题本来是一道DP的练习题,的真不好意思的是,尽管那道更复杂的poj1661我最终做出来了,可是花太多时间了!我决定改变学习策略,多看别人的,等有底子了,再自己来! 要知道国外一位伟人曾说过这样的话: 年轻人,不要总想着创造,先学习再说。 ——沃·兹基硕德 不过说实话,我真的觉得自己 阅读全文
posted @ 2018-02-09 20:29 柳暗花明_liu 阅读(313) 评论(0) 推荐(0)
摘要:题干在最后 首先承认这道题用了我很多的时间,作为一个动态规划入门者兼vj新手,这道题对我来讲是比较有难度的。 感想就是,设置判断条件时,一定要考虑全面,不要怕代码长; 然后就是,对于动态规划,不应只把他当作一种套路甚至是解体模版;这样的话,你就总是想“拿条件,套公式”,对于dp,这种思想是危险而又行 阅读全文
posted @ 2018-02-09 15:01 柳暗花明_liu 阅读(224) 评论(0) 推荐(0)
摘要:题干大概: 寻找两字符串最大公共子序列 我是看了北大在coursera的网课,过来做这道题的,一开始我用递归试了一下; 妥妥的,没过,然后我就想如何把递归改成递推。 想了想,没想出来,但我想到一个其他歪办法: 从0位置比较两字符串,字符相同的话ans++,i1++,i2++,不相同的话初始turn_ 阅读全文
posted @ 2018-02-08 11:00 柳暗花明_liu 阅读(168) 评论(0) 推荐(0)