POJ 2342 树形DP入门题
来源:互联网 发布:如何评价张作霖 知乎 编辑:程序博客网 时间:2024/06/05 03:31
有一个大学的庆典晚会,想邀请一些在大学任职的人来参加,每个人有自己的搞笑值,但是现在遇到一个问题就是如果两个人之间有直接的上下级关系,那么他们中只能有一个来参加,求请来一部分人之后,搞笑值的最大是多少。
树形DP入门题。
DP部分:
dp[i][0]表示职员i不来参加party,以i为根的子树的最大搞笑值,
dp[i][1]表示职员i来参加party,以i为根的子树的最大搞笑值。
转移方程:
dp[cur][1]+=dp[next][0];
dp[cur][0]+=Max(dp[next][1],dp[next][0]);
#include "stdio.h"#include "string.h"#include "vector"using namespace std;struct node{ int fa; vector<int>child;}data[6010];int dp[6010][2],vis[6010];int Max(int a,int b){ if (a<b) return b;else return a;}void dfs(int cur){ int i,next; vis[cur]=1; for (i=0;i<data[cur].child.size();i++) { next=data[cur].child[i]; if (vis[next]==0) dfs(next); dp[cur][1]+=dp[next][0]; dp[cur][0]+=Max(dp[next][1],dp[next][0]); }}int main(){ int n,i,a,b; while (scanf("%d",&n)!=EOF) { memset(dp,0,sizeof(dp)); memset(data,0,sizeof(data)); memset(vis,0,sizeof(vis)); for (i=1;i<=n;i++) scanf("%d",&dp[i][1]); while(scanf("%d%d",&a,&b)) { if (a+b==0) break; data[a].fa=b; data[b].child.push_back(a); } for (i=1;i<=n;i++) if (data[i].fa==0) { dfs(i); break; } printf("%d\n",Max(dp[i][1],dp[i][0])); } return 0;}
1 0
- POJ 2342 树形DP入门题
- POJ 2342 树形DP入门水题
- poj 2342 树形dp入门
- [ACM] POJ 2342 Anniversary party (树形DP入门题)
- POJ 2342 Anniversary party (树形dp 入门题)
- [ACM] POJ 2342 Anniversary party (树形DP入门题)
- HDU 1520 & POJ 2342 Anniversary party(树形DP入门题)
- 树形dp入门之poj 2342
- POJ 2342 (树形dp入门)
- poj 2342 Anniversary party 树形dp入门
- poj 2342 Anniversary party 树形dp入门
- POJ 3342 树形DP入门题
- POJ 1947 树形DP入门题
- 树形dp poj 2342
- poj 2342 树形DP
- poj 2342 树形DP
- poj 2342 树形DP
- poj 2342 树形dp
- ZOJ 3790 Consecutive Blocks 排序+扫描
- hdu 4901 The Romantic Hero 计数dp,位计算
- Bellman_ford算法,SPFA
- ubuntu下 简单配置samba,实现 共享夹
- 排列组合的算法
- POJ 2342 树形DP入门题
- mac下SVN上传.a静态库文件
- Shader之CubeMap 和基于法线的CubeMap
- vc++中实现进度条
- IntelliJ IDEA 使用SVN时报错:Subversion: (Accessing URL: XXX) SSLProtocolException: alert code: 112 alert
- Java学习之道:Java操作Excel之导出下载
- POJ-3262-Protecting the Flowers
- 用递归,迭代,通项公式三种方法实现斐波那契数列求解
- 虚拟机中Ubuntu中设置于主机共享网络连接