POJ 1947Rebuilding Roads(树形DP + 01背包)
题意:给出一个树形结构,求P个节点的子树最少要去掉几条边
分析:DP[root][j] 表示 以第 root 个为根节点, 包含j 个节点需要去掉几条边。那么对于 root 这个根节点来说, 要么选择 他的一个 儿子 k, 要么不选择, 如果选择 dp[root][j] = min( dp[k][i] + dp[root][j - i] ), k为root的子节点, 其中 0 < i < j; 如果不选择的话,就去掉root 和 k之间连线,dp[root][j] = dp[root] [j] + 1;
- #include <iostream>
- #include <cstring>
- #include <algorithm>
- #include <vector>
- #include <cstdio>
- using namespace std;
- const int Max = ;
- const int INF = 0x3f3f3f3f;
- vector<int> son[Max];
- int n, p;
- int indegree[Max];
- int dp[Max][Max];
- void dfs(int root)
- {
- int Size = son[root].size();
- for (int i = ; i <= p; i++)
- dp[root][i] = INF;
- dp[root][] = ; //全都设为0,对于叶子节点来说就是0
- for (int i = ; i < Size; i++)
- {
- int u = son[root][i];
- dfs(u);
- int temp;
- for (int j = p; j >= ; j--)
- {
- temp = dp[root][j] + ; // 不选择u这个子节点,那么就+1
- for (int k = ; k < j; k++) // 枚举root的节点个数,所以第一层 i 要从p开始枚举,因为这里要用到 小的,保证小的是上一个状态
- {
- temp = min(temp, dp[root][k] + dp[u][j - k]);
- }
- dp[root][j] = temp;
- }
- }
- }
- int solve(int root)
- {
- dfs(root);
- int ans = dp[root][p]; // 这个子树可能以root为根
- for (int i = ; i <= n; i++) // 也可以不以root为根
- ans = min(ans, dp[i][p] + );
- return ans;
- }
- int main()
- {
- while (scanf("%d%d", &n, &p) != EOF)
- {
- for (int i = ; i <= n; i++)
- son[i].clear();
- memset(indegree, , sizeof(indegree));
- int I, J, root;
- for (int i = ; i < n; i++)
- {
- scanf("%d%d", &I, &J);
- son[I].push_back(J);
- indegree[J]++;
- }
- for (int i = ; i <= n; i++)
- {
- if (!indegree[i]) // 找根节点
- {
- root = i;
- break;
- }
- }
- printf("%d\n", solve(root));
- }
- return ;
- }
POJ 1947Rebuilding Roads(树形DP + 01背包)的更多相关文章
- POJ.3624 Charm Bracelet(DP 01背包)
POJ.3624 Charm Bracelet(DP 01背包) 题意分析 裸01背包 代码总览 #include <iostream> #include <cstdio> # ...
- poj 2923 状压dp+01背包
好牛b的思路 题意:一系列物品,用二辆车运送,求运送完所需的最小次数,两辆车必须一起走 解法为状态压缩DP+背包,本题的解题思路是先枚举选择若干个时的状态,总状态量为1<<n,判断这些状态 ...
- hihoCoder#1055 : 刷油漆 (树形DP+01背包)
题目大意:给一棵带点权的树,现在要从根节点开始选出m个连通的节点,使总权值最大. 题目分析:定义状态dp(u,m)表示在以u为根的子树从根节点开始选出m个点连通的最大总权值,则dp(u,m)=max( ...
- HDU1561:The more, The Better(树形DP+01背包)
Problem Description ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物.但由于地理位置原因,有 ...
- hdu 1561【树形dp+01背包】
http://acm.hdu.edu.cn/showproblem.php?pid=1561 很容易想到如果是要攻克v城需要先攻克u城的话,可以建u到v的边.但是如果能够直接攻克u城呢?无边可建,这样 ...
- 树形DP +01背包(HDU 1011)
题意:有n个房间,有n-1条道路连接着n个房间,每个房间都有若干个野怪和一定的能量值,有m个士兵从1房间入口进去,到达每个房间必须要留下若干士兵杀死所有的野怪,然后其他人继续走,(一个士兵可以杀死20 ...
- HDU 1561 The more, The Better(树形DP+01背包)
The more, The Better Time Limit : 6000/2000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other ...
- POJ 2184 Cow Exhibition【01背包+负数(经典)】
POJ-2184 [题意]: 有n头牛,每头牛有自己的聪明值和幽默值,选出几头牛使得选出牛的聪明值总和大于0.幽默值总和大于0,求聪明值和幽默值总和相加最大为多少. [分析]:变种的01背包,可以把幽 ...
- USACO Money Systems Dp 01背包
一道经典的Dp..01背包 定义dp[i] 为需要构造的数字为i 的所有方法数 一开始的时候是这么想的 for(i = 1; i <= N; ++i){ for(j = 1; j <= V ...
随机推荐
- Oracle中修改表名遇到“ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效”
Oracle 11g中想修改表名: rename ASSETPORJECT to ASSETPROJECT; 结果提示:ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超 ...
- 为什么带网格(mesh)的模型添加了刚体Rigidbody和MeshCollider,还是会从地板穿过去?
两个Gameobject 放置在空中, 一个是Cube,一个是茄子模型 Cube的Collider 是Box Collider , 茄汁的Collider 是mesh collider, 他们都添加了 ...
- MEF
详情见链接:http://www.cnblogs.com/comsokey/p/MEF1.html#top
- 61-umask 简明笔记
设定在创建文件时的权限掩码 umask [mask] 参数 mask可以是3位八进制数或者是如同在chmod中使用的符号值,mask指定不允许的权限(文件的实际权限是777减去umask值) 如果没有 ...
- C#中的Where和Lambda表达式
1 2 3 4 5 6 7 8 9 10 11 List<string> listString = new List<string>(); listString.Add(&qu ...
- Python基础-函数篇
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 函数与函数式编程 1.面向对象: 华山派-- ...
- Django- 1- 数据库设置
更改配置文件中的 字段更改为 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', //按照自己的数据库配置配置,现在所配置 ...
- Boundary Representations
用所有属于boundary的点来表示boundary, 有两个主要的缺点, 一是数据量大, 二是对噪声敏感. 用boundary的一些representation而非精确的boundary本身来表示b ...
- selenium+webdriver+python 中警告框的处理方法
在自动化测试过程中,经常会遇到弹出警告框的情况,如图所示: 在 WebDriver 中处理 JavaScript 所生成的 alert.confirm 以及 prompt 是很简单的.具体做法是使用 ...
- c# 百度api语音识别
public static string getStrAccess(string para_API_key, string para_API_secret_key) { //方法参数说明: //par ...