POJ 1947 树DP获得冠军
特定N点,N-1的关系。建立了一棵树,问至少减去几个边缘节点可以被作为得到P树。树典型DP称号
dp[cur][j] :记录cur节点,为了得到一个j除去该子树的节点的边的最小数目
对当前树的每个子树进行计算
砍掉此子树: dp[cur][j]=dp[cur][j]+1;
不砍掉: for (l=0;l<=j;l++) dp[cur][j]=Min(dp[cur][j],dp[cur][l]+dp[next][j-l]); 枚举从该树中留l个节点其它由新进子树得到的方案的代价 dp[cur][l]+dp[next][j-l];
#include "stdio.h"
#include "vector"
#include "math.h"
#include "string.h"
int inf=0x3f3f3f3f;
using namespace std; struct node
{
int fa;
vector<int>child;
}data[160]; int dp[160][160];
int p; int Min(int a,int b)
{
if (a<b) return a; else return b;
} void dfs(int cur)
{
int next,i,j,l; dp[cur][1]=0; for (i=0;i<data[cur].child.size();i++)
{
next=data[cur].child[i];
dfs(next); for (j=p;j>=0;j--)
{
dp[cur][j]=dp[cur][j]+1;
for (l=0;l<=j;l++)
dp[cur][j]=Min(dp[cur][j],dp[cur][l]+dp[next][j-l]);
}
}
}
int main()
{
int n,a,b,i,root,ans;
while (scanf("%d%d",&n,&p)!=EOF)
{
memset(dp,inf,sizeof(dp));
memset(data,0,sizeof(data));
for (i=1;i<n;i++)
{
scanf("%d%d",&a,&b);
data[b].fa=a;
data[a].child.push_back(b);
} for (i=1;i<=n;i++)
if (data[i].fa==0)
{
root=i;
break;
} dfs(root); ans=dp[root][p];
for (i=1;i<=n;i++)
ans=Min(ans,dp[i][p]+1); printf("%d\n",ans);
}
return 0;
}
版权声明:本文博客原创文章。博客,未经同意,不得转载。
POJ 1947 树DP获得冠军的更多相关文章
- [poj 1947]树dp+背包问题
题目链接:http://poj.org/problem?id=1947 看了很多题解都是直接一遍dfs就搞定的方法,但是我实在是没看懂那个转移方程.最后在茫茫博客中终于发现了一个有逻辑的方法,但是复杂 ...
- [ACM] POJ 2342 Anniversary party (树DP获得冠军)
Anniversary party Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4410 Accepted: 2496 ...
- poj 1947 树形dp
思路:dp[i][j]表示,以i节点为根,删去j个节点最少要断几条边. 那么dp[u][j]=min(dp[u][j],dp[v][k]+dp[u][j-k]);//选取最优状态 dp[u][j]=m ...
- poj 1947(树形DP+背包)
Rebuilding Roads Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 10663 Accepted: 4891 ...
- poj 3162 树DP+单调队列
http://acm.hust.edu.cn/vjudge/problem/11552 http://blog.csdn.net/woshi250hua/article/details/7727677 ...
- POJ 2631 Roads in the North(求树的直径,两次遍历 or 树DP)
题目链接:http://poj.org/problem?id=2631 Description Building and maintaining roads among communities in ...
- POJ3417 LCA+树dp
http://poj.org/problem?id=3417 题意:先给出一棵无根树,然后下面再给出m条边,把这m条边连上,然后每次你能毁掉两条边,规定一条是树边,一条是新边,问有多少种方案能使树断裂 ...
- Fire (poj 2152 树形dp)
Fire (poj 2152 树形dp) 给定一棵n个结点的树(1<n<=1000).现在要选择某些点,使得整棵树都被覆盖到.当选择第i个点的时候,可以覆盖和它距离在d[i]之内的结点,同 ...
- CF456D A Lot of Games (字典树+DP)
D - A Lot of Games CF#260 Div2 D题 CF#260 Div1 B题 Codeforces Round #260 CF455B D. A Lot of Games time ...
随机推荐
- Spring MVC框架搭建
Spring MVC篇一.搭建Spring MVC框架 本项目旨在搭建一个简单的Spring MVC框架,了解Spring MVC的基础配置等内容. 一.项目结构 本项目使用idea intellij ...
- Android图表日历控件组件
1.图表引擎 - AChartEngine AChartEngine是一款基于Android的图表绘制引擎,它为Android开发人员提供了非常多有用的图表绘制工具类,假设你须要在Android应用中 ...
- 使用Heroku,需要locale至zh_CN,代替zh-CN
使用Heroku.需要locale至zh_CN,代替zh-CN 我认为这是由于在application.rb于,config.i18n.default_locale默认接受值这是Symbol, 而当我 ...
- linux虚拟机网络配制方法及遇到问题的解决方法
linux虚拟机网络问题 刚安装一个vmware虚拟机.并在上面安装了一个redhat linux操作系统. 安装完后配制了下网络. 首先观察windows上的网络配制. ip:192.168.1.1 ...
- Ubuntu文件的复制、移动和删除命令
先说说cp复制命令 该命令的功能是将给出的文件或文件夹复制到还有一文件或文件夹中,同MSDOS下的copy命令一样,功能十分强大. 语法: cp [选项] 源文件或文件夹 目标文件或文件夹 说明:该命 ...
- bzoj 2437 [Noi2011]兔子和鸡蛋 [二分图匹配]
叙述性说明 这些日子.兔子和蛋像一个新的棋盘游戏. 这场比赛是在 n 行 m 在船上进行列. 前,棋盘上有一 个格子是空的,其他的格子中都放置了一枚棋子,棋子或者是黑色,或者是白色. 每一局游戏总是兔 ...
- Struts1和Struts2对照
最近学习Struts1和Struts2.好多人.提到非常多的信息. Struts2不从Struts1进化. Struts2的前身WebWork. 呢,看了一些资料,下边就来比較比較. 一.架构分析 S ...
- 体验VS2015正式版
初次体验VS2015正式版,安装详细过程. 阅读目录 介绍 安装 介绍 纽约时间7月20日,微软发布了vs 2015 正式版,换算到我们的北京时间就是晚上了,今天回到家里,就下下来了,装上去 ...
- 十天学Linux内核之第二天---进程
原文:十天学Linux内核之第二天---进程 都说这个主题不错,连我自己都觉得有点过大了,不过我想我还是得坚持下去,努力在有限的时间里学习到Linux内核的奥秘,也希望大家多指点,让我更有进步.今天讲 ...
- linux安装和配置 mysql、redis 过程中遇到的问题记录(转)
章节目录 mysql redis linux下部署mysql和redis网上的教程很多,这里记录一下我部署.配置的过程中遇到的一些问题和解决办法. mysql ①安装完成后启动的时候报错 Starti ...