随笔分类 - 动态规划DP
摘要:Jury Compromise "POJ 1015" 推荐几个较好的介绍和理解:https://blog.csdn.net/lyy289065406/article/details/6671105 https://blog.csdn.net/glqac/article/details/2268724
阅读全文
摘要:FatMouse's Speed "HDOJ 1160" 注意输出长度的时候不是输出dp[n] include using namespace std; const int maxn=1003; const int INF=0X3F3F3F3F; int w[maxn];//weight int s
阅读全文
摘要:最少拦截系统 "HDOJ 1257" 我做这题的思路就是采用暴力或者贪心。也就是每次循环选出从第一个未被选择的元素开始,依次把后面可以选择的元素作为一个系统。最后统计可以有多少个系统。 还有人的思路就是利用动态规划的思路,求解最长上升子序列,也就是反着题意来求。因为在这个最长上升子序列中,所有的元素
阅读全文
摘要:Tickets "HDOJ 1260"
阅读全文
摘要:免费陷阱 "HDOJ 1176" 一开始正向推的时候,一直wa,后来采用逆向推得到正确结果。 初始化的时候dp数组都初始化为0。 include using namespace std; const int INF=0X3F3F3F3F; const int maxn=100005; const i
阅读全文
摘要:Piggy Bank "HDOJ 1114" 本题就是完全背包的模板题,注意复习一下关于背包九讲中的问什么这里使用的是顺序遍历。 还需要注意的一个问题就是初始化的问题,dp[0]初始化为0,其他的初始化为无穷大。因为最后的状态是背包一定是满的。(具体看背包九讲的ppt的解释) //完全背包的问题 i
阅读全文
摘要:压缩编码 "201612 4" 一开始看这题还以为是哈夫曼编码的题目,结果是哈夫曼题目的变形。 哈夫曼编码是每次合并任意两堆石子,而这里的题目是合并相邻的两堆石子,而且这里的合并花费是合并两堆石子加上所有的叶子结点。 参考图解:https://blog.csdn.net/more_ugly_less
阅读全文
摘要:Doing Homework "HDOJ 1074" 1.本题主要用的是状态压缩的方法,将每种状态用二进制压缩表示 2.状态转移方程:dp[i|(1 include include include include using namespace std; const int INF=0x3f3f3f
阅读全文
摘要:Monkey and Banana "HDOJ 1069" 这里实际是嵌套矩形问题的变式,也就是求不固定起点的最长路径 动态转移方程为:dp[i]=max(dp[j]+block[i].h|(i,j)∈map),这里的dp[i]表示从i块出发的可以构建的最大的高度。 首先需要构建出图map,表示一块
阅读全文
摘要:Ignatius and the Princess IV "hdoj 1029" 这里主要是先排序,因为要找出现了一半以上的数字,所以出现的数字一定在中间 方法一: include include include include include using namespace std; int n;
阅读全文
摘要:Max Sum Plus Plus "HDOJ 1024" 动态转移方程:dp[i][j]=max(dp[i][j 1]+a[j],max(dp[i 1][k])+a[j]) (0 include include include include using namespace std; const
阅读全文
摘要:Traving "HDOJ 3001" 这题考察的是状态压缩dp和tsp问题的改编 需要和传统tsp问题区分的事,这题每个点最多可以经过两次故状态有3种:0,1,2 这里可以模仿tsp问题的二进制压缩方法,进行压缩最后再dp处理: P191 白书tsp问题求解 include include inc
阅读全文