随笔分类 - 动态规划DP
摘要:题目: 传送门 思路: //该动归的状态设置为从前k个愿望中挑选剩余时间i金钱j所实现的愿望个数 //很明显 这里的限制条件有了金钱和时间 另外加上愿望数量 从而dp数组扩展到了三维 //dp[i][j][k]代表的是从前k个愿望中剩余时间i和金钱j 所能实现的愿望个数 核心套路(动归通用): ①先
阅读全文
摘要:题目描述: 传送门 思路: //dp[i][j]代表的是i到j的距离 dp思想 核心递推式:dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]); (i<=k<=j) 但实际上本题起点确定了 故i取1即可 代码: #include<iostream> #include<a
阅读全文
摘要:题目描述: 传送门 题解思路: 首先题目中发明确告诉了是一棵树,所以在输入数据后应该构建一棵树来储存这些数据。 这是一道非常经典的树形dp问题,对每个结点dp[i][0]表示不邀请这个员工,其子树达到的最大快乐值,dp[i][1]表示邀请i员工其子树达到的最大值,对于每个结点的状态应该从这两方面去考
阅读全文
摘要:题目描述: 传送门 题解:最长公共子序列是一个经典的dp问题。核心的递推公式如下图,根据下面的递推式子便能写出解决的代码。 #include<iostream> #include<cmath> #include<algorithm> using namespace std; int num[1000
阅读全文
摘要:描述 有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40。John现在有n个想要得到的物品,每个物品的体积分别是a1,a2……an。John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是,
阅读全文
摘要:题目描述: 传送门 题解思路:和最长公共子序列一样,LIS也是一个经典的dp问题。动规的常见套路是将原问题化简成多个形式相同的子问题。这里求序列的最长上升子序列长度,首先求以ai(ai是序列中的元素,1<=i<=n)结尾的最长上升子序列长度,再从这些以ai结尾的最长子序列长度中选择一个最长的作为整个
阅读全文