摘要: 又一道树形dp,发现其实树形dp长得都挺像的。 阅读全文
posted @ 2015-07-18 20:49 hxy_has_been_used 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 经典树形dp:问在一棵树上最少删除多少条边可以分离出一个节点数为p的子树。 定义状态: dp[i][j]表示从i为根的子树上分离出一个节点数为j的子树的代价(最少需要删除的边数)。 考虑i节点的每个儿子ii,ii可以选或者不选(切断),然后就转化成了背包问题。 dp[u][j] = min( dp[ 阅读全文
posted @ 2015-07-18 20:13 hxy_has_been_used 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 定理:二分图的最大匹配=最小点覆盖。思路:将所有行看做点集X,所有列看做点集Y,如果在[i, j]处有小行星,则建立一条从i到j的边,然后求最大匹配即为最小点覆盖数即为答案。 1 #include 2 #include 3 #include 4 using namespace std; 5 ... 阅读全文
posted @ 2015-07-18 18:21 hxy_has_been_used 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 容易得到:dp[n] = dp[n - 1] * p + dp[n - 2] * ( 1 - p ); (1) 如果在位置i有雷的话,则:dp[i + 1] = dp[i - 1] * ( 1 - p ); 如何求得dp[i]呢? 我们可以解特征方程(1),得到: dp[n] = a * ( p - 阅读全文
posted @ 2015-07-18 16:57 hxy_has_been_used 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 题意:给出n个数字[1,n],问你可以组成多少种不同的序列,其中每一个序列由几个部分组成,每个部分包含几个数字,每部分内数字无序,部分之间数字有序。每个数字最多使用一次,可以不用。思路:枚举从n个数字中选出i个数字(组合数),再枚举将这i个数字分成j个部分(第二类斯特林数),然后乘上j的全排列。 1... 阅读全文
posted @ 2015-07-18 16:09 hxy_has_been_used 阅读(295) 评论(0) 推荐(0) 编辑