POJ 2342 && HDU 1520 Anniversary party(树形DP)
2015-08-06 10:59
417 查看
Description
话说一个公司的一些然要去参加一个party,每个人有一个愉悦值,而如果某个人的直接上司在场的话会非常扫兴,所以避免这样的安排,问给出n个人,每个人的愉悦值以及他们的上司所属关系,问你让那些人去可以让总的愉悦值最大,并求出这个值
Input
第一行为总人数n,之后n行为每个人的愉悦值,然后每行两个整数a和b表示所属关系b是a的上司,以0 0结束所属关系输入
Output
输出最大总愉悦值
Sample Input
7
1
1
1
1
1
1
1
1 3
2 3
6 4
7 4
4 5
3 5
0 0
Sample Output
5
Solution
这个公司的人事关系可以根据给出的数据得到一个树,最上面的是最高层,往下依次,我们要做的就是在树的节点处进行dp。
用dp[i][0]表示当前i这个人不去,dp[i][1]表示当前i这个人去
那么dp[fa[i]][1]+=dp[i][0]
而 dp[fa[i]][0]+=max(dp[i][0],dp[i][1])
Code
话说一个公司的一些然要去参加一个party,每个人有一个愉悦值,而如果某个人的直接上司在场的话会非常扫兴,所以避免这样的安排,问给出n个人,每个人的愉悦值以及他们的上司所属关系,问你让那些人去可以让总的愉悦值最大,并求出这个值
Input
第一行为总人数n,之后n行为每个人的愉悦值,然后每行两个整数a和b表示所属关系b是a的上司,以0 0结束所属关系输入
Output
输出最大总愉悦值
Sample Input
7
1
1
1
1
1
1
1
1 3
2 3
6 4
7 4
4 5
3 5
0 0
Sample Output
5
Solution
这个公司的人事关系可以根据给出的数据得到一个树,最上面的是最高层,往下依次,我们要做的就是在树的节点处进行dp。
用dp[i][0]表示当前i这个人不去,dp[i][1]表示当前i这个人去
那么dp[fa[i]][1]+=dp[i][0]
而 dp[fa[i]][0]+=max(dp[i][0],dp[i][1])
Code
#include<cstdio> #include<iostream> #include<vector> using namespace std; #define maxn 6666 int a[maxn],fa[maxn],dp[maxn][2]; vector<int> vec[maxn]; int n; void dfs(int root) { dp[root][1]=a[root]; int len=vec[root].size(); for(int i=0;i<len;i++) dfs(vec[root][i]); for(int i=0;i<len;i++) { dp[root][0]+=max(dp[vec[root][i]][1],dp[vec[root][i]][0]);//这个人不去 dp[root][1]+=dp[vec[root][i]][0];//这个人去 } } int main() { while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) { scanf("%d",&a[i]); //初始化 vec[i].clear(); fa[i]=-1; dp[i][0]=dp[i][1]=0; } int u,v; while(scanf("%d%d",&u,&v),u||v) { vec[v].push_back(u); fa[u]=v; } int temp=1; while(fa[temp]!=-1)//找到根节点 temp=fa[temp]; dfs(temp);//从根节点开始搜索 int ans=max(dp[temp][0],dp[temp][1]); printf("%d\n",ans); } return 0; }
相关文章推荐
- Android学习的一些困惑和方向
- IP分片原理
- Linux SSH远程文件/目录传输命令scp
- 提升tomcat服务器性能的七条经验
- MySQL语法
- MySQL基础语句
- hdu 1498 50 years, 50 colors(二分匹配_匈牙利算法)
- 创建简单的Telnet实例
- [上海][2015年8月29日-30日] 牛人大咖集结 D-Future 大会,你来么?
- 【暑期基础2】H HDU 2033 人见人爱A+B
- Android静态编译LOCAL_FORCE_STATIC_EXECUTABLE
- Linux编程系统时间的获取
- 训练自己haar-like特征分类器并识别物体(1)
- 洛谷1040 加分二叉树
- TCP协议的那些事(总结篇)
- 矩形覆盖
- 1-Android项目目录结构和常见的英文缩写
- 试用版SQL Server 2008 R2 提示评估期已过
- Rman--状态管理命令
- json数据的使用方法