摘要:
动态规划条件 无后效性 :即已经求解的子问题不受后续阶段的影响 最优子结构性质 :即下一阶段的最优解应该能够由前面各阶段子问题的最优解导出 子问题重叠性 :即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。(该性质并不是动态规划适用的必要条件,但是如果没有这条性质,动态规划算法同其 阅读全文
摘要:
鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的。根据这个特点阿Q编写了一个打鼹鼠的游戏:在一个nn的网格中,在某些时刻鼹鼠会在某一个网格探出头来透透气。你可以控制一个机器人来打鼹鼠,如果i时刻鼹鼠在某个网格中出现,而机器人也处于同一网格的话,那么这个鼹鼠就会被机器 阅读全文
摘要:
树形dp 模型:给定一颗有n个节点的树,任选一个节点为根节点,从而定义出每个节点的深度和每棵子树的根。 树形DP的特殊性:没有环,dfs是不会重复,而且具有明显而又严格的层数关系。利用这一特性,我们可以很清晰地根据题目写出一个在树(型结构)上的搜索的程序。而深搜的特点,就是“不撞南墙不回头” 基本思 阅读全文
摘要:
题目描述 SERKOI最新推出了一种叫做“免费馅饼”的游戏:游戏在一个舞台上进行。舞台的宽度为W格,天幕的高度为H格,游戏者占一格。开始时游戏者站在舞台的正中央,手里拿着一个托盘。下图为天幕的高度为4格时某一个时刻游戏者接馅饼的情景。 游戏开始后,从舞台天幕顶端的格子中不断出现馅饼并垂直下落。游戏者 阅读全文
摘要:
坐标dp 坐标型dp一般都是给定网格、序列,来求满足某种性质的最大值、最小值。f[i][j]代表以i、j结尾的满足条件的某种情况。 典型例题:传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵 阅读全文
摘要:
区间dp 区间dp属于线性dp的一种,以“区间长度”作为dp的“阶段”,用两个坐标(区间的左、右端点)描述每个维度。区间dp中,一个状态往往由若干个比它更小且包含于它的区间所代表的阶段转移而来,所以区间dp的决策往往就是划分dp的方法。(例:f[i][j]=f[i][k]+f[k+1][j]) 区间 阅读全文
摘要:
线性dp 具有线性阶段划分的动态规划算法被统称为线性dp 经典例题有: 1.最长上升子序列(lis) 2.最长公共子序列(lcs) 3.数字三角形 这里给出最长上升序列的代码 for(int i=1;i<=n;i++){ f[i]=1; for(int j=1;j<i;j++){ if(d[i]>d 阅读全文
摘要:
背包dp 背包dp的模型可以看作是“给定n个物品,从中选择一定的物品”。 我们从以下几个角度考虑: 1.已经选择的物品 2.背包容量 dp数组常常保存最大价值 0/1背包(一个物品只选一次) #include <bits/stdc++.h> using namespace std; const in 阅读全文