![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数位dp与树形dp
Infinity_Izayoi
这个作者很懒,什么都没留下…
展开
-
POJ 1947 Rebuilding Roads (树形dp + 01背包)
题目链接:http://poj.org/problem?id=1947题解:开一个dp数组,dp[i][j]表示以第i个节点为根,保留j个点所需要的刀数。可以先将所有dp[i][1]初始化为 i的儿子数(仅保留这个点需要的刀数),其他位置初始化为无限大。然后将问题看做一个01背包,物品的容量就是m,此时和普通的01背包区别为背包里的物品(也就是子树)可以选择k个节点砍掉或者不砍(j + k <=原创 2016-07-22 21:09:22 · 288 阅读 · 0 评论 -
POJ 3252 - Round Numbers(数位dp)
题目链接:http://poj.org/problem?id=3252题解:题解我自己没想出来。。后来参考了大牛的思路与代码,有种恍然大悟的感觉。 大牛的解题报告:優YoU http://www.cnblogs.com/lyy289065406/archive/2011/07/31/2122758.htmlAC代码:#include <iostream>#include <cstdio>#in原创 2016-07-22 16:21:59 · 263 阅读 · 0 评论 -
POJ - 3342 - Party at Hali-Bula (树形dp + 判断唯一解)
题目链接:http://poj.org/problem?id=3342题解:开一个dp数组,dp[i][0]表示第i个人不去能得到的最大价值,dp[i][1]表示第i个人去能得到的最大价值。 状态转移方程为:dp[i][1] += dp[i-1][0]; dp[i][0] += max(dp[i-1][0],dp[i-1][1]); (注意,在这里产生是否为唯一解)dp数组解决完毕后,接下来只要原创 2016-07-22 13:59:30 · 318 阅读 · 0 评论 -
POJ 2342 - Anniversary party (树形dp)
题目链接:http://poj.org/problem?id=2342题解:dp[i][0]表示第i个人不去所获得的最大价值,dp[i][1]表示第i个人去所获得的最大价值。 状态转移方程为: dp[boss][1] += dp[employee][0]; dp[boss][0] += max(dp[employee][0],dp[employee][1]);用dfs搜一下就好了。AC代码:#原创 2016-07-21 21:33:16 · 329 阅读 · 0 评论 -
HDU 2089 不要62(数位dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089题解:开一个dp数组,设i代表当前数字的长度,dp[i][0]表示不含4和62的数字, dp[i][1] 表示不含4和62且最高位为2的数字,dp[i][2]表示含有4和62的数字。可以推出以下的递推公式:dp[0][0] = 1; for(i = 1; i<=6; i++)//数字最长为6原创 2016-07-20 21:50:37 · 511 阅读 · 0 评论 -
HDU - 3555 Bomb(数位dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555题解:开一个dp数组,i代表当前数字的长度,dp[i][0]表示不含49的数字个数,dp[i][1]表示最高位为9且不含49的数字的个数,dp[i][2]表示满足条件的数字个数。可以推出以下的递推公式:dp[0][0] = 1;for(int i = 1; i <= 22; i++){原创 2016-07-20 17:09:33 · 303 阅读 · 0 评论