uvalive2038(树形DP基础题)
2016-04-20 17:35
429 查看
题目大意:
给定一棵树,要求选择尽量少的点,使得没有被选择的点都可以至少和一个已经选择的点相邻。
思路:
树形DP。
类似于01背包问题。
树上的结点要么选要么不选。
dp[i][0]表示第i个结点不选
那么dp[i][0] += dp[j][1] 其中j是i的子树的根节点。
dp[i][1]表示第i个结点要选
那么dp[i][1] += min(dp[j][1],dp[j][0])
发现一个问题:
9
0:(3) 1 2 3
2:(1) 4
4:(1) 5
5:(3) 6 7 8
这组数据的答案是2 但是跑出来是3。
不懂。。。
代码:
给定一棵树,要求选择尽量少的点,使得没有被选择的点都可以至少和一个已经选择的点相邻。
思路:
树形DP。
类似于01背包问题。
树上的结点要么选要么不选。
dp[i][0]表示第i个结点不选
那么dp[i][0] += dp[j][1] 其中j是i的子树的根节点。
dp[i][1]表示第i个结点要选
那么dp[i][1] += min(dp[j][1],dp[j][0])
发现一个问题:
9
0:(3) 1 2 3
2:(1) 4
4:(1) 5
5:(3) 6 7 8
这组数据的答案是2 但是跑出来是3。
不懂。。。
代码:
#include <iostream> using namespace std; #include <cstring> #include <cstdio> const int maxn = 1510; int n; char str[120]; int tot; int head[maxn]; int d[maxn][3]; struct Edge { int t,ne; }edge[maxn *(maxn - 1)/2]; void addedge(int u,int v) { edge[tot].t = v; edge[tot].ne = head[u]; head[u] = tot++; } void dfs(int u,int father) { d[u][0] = 0; d[u][1] = 1; for(int e = head[u];e != - 1; e = edge[e].ne) { int v = edge[e].t; if(v == father) continue; dfs(v,u); d[u][0] += d[v][1]; d[u][1] += min(d[v][0],d[v][1]); } } int main() { while(scanf("%d",&n) !=EOF) { tot = 0; memset(head,-1,sizeof(head)); for(int i = 0; i < n ; i++) { scanf("%s",str); int flag = 0; int start,num; int e; for(int j = 0; str[j]!= '\0';) { if(str[j] >= '0' && str[j] <= '9') { int temp = str[j] - '0'; j++; while(str[j] >= '0' && str[j] <= '9') { temp = temp * 10 + (str[j] - '0'); j++; } if(flag == 0) { start = temp; flag ++; } else num = temp; } else j++; } for(int j = 0; j < num; j++) { scanf("%d",&e); addedge(start,e); addedge(e,start); } } dfs(0,-1); printf("%d\n",min(d[0][0],d[0][1])); } return 0; }
相关文章推荐
- 【转】C# Json数据转换为Xml
- C++格式控制符
- java代理(静态代理和jdk动态代理以及cglib代理)
- Office 365 之目录同步-安装配置Azure AD Connect同步工具
- 指针常量与常量指针的理解
- JSP运行原理和九大隐式对象
- JDK容器与并发—Map—HashMap
- 企业发放奖金根据利润提成,从键盘输入当月利润I,求应发放奖金总数?
- Redis支持5种数据类型之一Sets
- 通知与消息机制
- Android 内存使用hprof文件打开方法
- 回文字符串的最大长度
- 在linux apache 上部署 django 网站
- memcache中一致性哈希算法总结
- APUE------标准I/O库
- Cordova学习
- [OpenGL]第一章 OpenGL概述
- JDK容器与并发—Map
- New Document
- Android app嵌套html5之Webview和js的交互