2018年12月10日
摘要: ALS 一道动态规划最经典的题目 动态规划实质上其实就是表格法,利用表格来记录每个子问题的解。 DP所关注的其实是递归 即一个较小问题的解和一个较大问题的状态转移问题。 其次还要关注的其实还是是初始值的设立,这个决定了后续的递推能否顺利的进行。 还有要思考好dp数组所代表的具体的含义 这样在状态转移 阅读全文
posted @ 2018-12-10 00:07 Visper 阅读(147) 评论(0) 推荐(0) 编辑
  2018年12月9日
摘要: 借用着道题来复习一下 二分查找 说起二分查找 有几个点是要重视的 1.最简单的二分查找 2.上下界二分查找的实现 3.c++ STL 二分查找三兄弟的使用 最简单的二分查找 上下界二分查找:其实自己手写上下界二分查找其实也不难。上下界其实就是当你找到一个值无法直接确定这个值是否就是最小或者最大的值, 阅读全文
posted @ 2018-12-09 23:11 Visper 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 这道题本质上还是一个完全背包的问题 需要注意的点还是: 1.要求装满首先是讲一维初始化问题 至于是正无穷还是负无穷要根据问题而定。 2.min OR max? #include <iostream> #include <algorithm> #include <cstring> using name 阅读全文
posted @ 2018-12-09 15:14 Visper 阅读(145) 评论(0) 推荐(0) 编辑
  2018年12月4日
摘要: 01背包问题是很经典的动态规划问题,给定总容量T,物品的件数。然后给定数组weight[k] value[k]来求解背包装上物品所带来的最大收益。 最开始的时候是设置二维DP数组来求解问题 我们不妨设数组DP[i][j]来表示的是前i件物品在容量为j的情况下所取得的最大收益值,当我们设置好一个DP数 阅读全文
posted @ 2018-12-04 17:46 Visper 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 这道题是一道简单的动态规划的问题,题目大意是利用n个数来判断是否可以组成一个值为k的数字 这道题可以利用必须装满的01背包思路来解释,另一方面也可以利用另一种思路来思考,直接从答案入手,定义dp数组DP【i】【j】那么这个数组所代表的意思就是前i个数是否可以组成值为j的数。由于dp的值只有两个,于是 阅读全文
posted @ 2018-12-04 16:46 Visper 阅读(173) 评论(0) 推荐(0) 编辑
  2018年12月3日
摘要: 其实树形DP的思路还是基于DP,对于一棵树本来就有很好的递归性质,很多树形DP的问题,也不是不可以使用单纯的树上递归来解决,那为什么还要引入递归的问题呢?? 很简单的回答就是,DP中的P就是programing 的意思,是一种记录,对于递归的低效性,很大一部分来源于对于单个问题的重复计算,我们使用一 阅读全文
posted @ 2018-12-03 16:26 Visper 阅读(458) 评论(0) 推荐(0) 编辑
摘要: 首先虽然这道题说的是树形DP的事情,但是其实本质上还是考察DFS的事情,说起深搜,自己的理解还是太浅了,一开始对这道题的理解是,默认题目里说的最长链说的是一定会经过俩个叶节点,但是不一定会经过根节点。但是实质上根节点不一定在最长链的通路上。而我一开始实现的操作还是利用了上学期的数据结构的利用递归实现 阅读全文
posted @ 2018-12-03 15:16 Visper 阅读(865) 评论(0) 推荐(0) 编辑
  2018年11月30日
摘要: 1 #include 2 #include 3 #include 4 using namespace std; 5 6 const int Maxlen=1e5; 7 int prices[Maxlen]; 8 int n,k; 9 10 int quickSolve(){ 11 //as long as there is a price gap ,we g... 阅读全文
posted @ 2018-11-30 20:12 Visper 阅读(705) 评论(0) 推荐(0) 编辑
摘要: 1 #include 2 #include 3 #include 4 using namespace std; 5 6 const int Maxlen=1e5; 7 const int INF = 0x3f3f3f; 8 const int _INF = -0x3f3f3f; 9 10 int main(){ 11 12 //局部最优解 和 全局最... 阅读全文
posted @ 2018-11-30 19:42 Visper 阅读(580) 评论(0) 推荐(0) 编辑
摘要: Best Time to Buy and Sell Stock III 给定每一天的股票价格(用 price数组来存储) 限定条件是至多只能交易两次交易(一次买卖为一次交易) #include <algorithm> #include <iostream> #include <string.h> u 阅读全文
posted @ 2018-11-30 19:28 Visper 阅读(1281) 评论(0) 推荐(0) 编辑