POJ2342[Anniversary party] 树上动态规划
来源:互联网 发布:网络扣字大手排行榜 编辑:程序博客网 时间:2024/05/29 18:34
题意:
某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知每个人的活跃指数和上司关系(当然不可能存在环),求邀请哪些人(多少人)来能使得晚会的总活跃指数最大。
题目传送门
解题思路:
树形DP, 用dp[i][0/1]来表示i节点选不选,就有状态转移方程
dp[i][1] += dp[j][0]
dp[i][0] += max( dp[j][0], dp[j][1] )
其中,j表示i的儿子节点
贴个代码
#include <cstdio>#include <cstring>#include <iostream>using namespace std;int father[6020], dp[6020][2];bool vis[6020];int n;void Tree_Dp( int node ){ vis[node] = 1; for ( int i = 1; i <= n; i++ ) if ( !vis[i] && father[i] == node ){ Tree_Dp(i); dp[node][1] += dp[i][0]; dp[node][0] += max( dp[i][1], dp[i][0]); } }int main(){ while ( scanf( "%d", &n) != EOF ){ memset( father, 0, sizeof(father)); memset( dp, 0, sizeof(dp)); memset( vis, false, sizeof(vis)); int x, y=1, root; for ( int i = 1; i <= n; i++) scanf( "%d", &dp[i][1]); for ( ; x||y ;) scanf( "%d%d", &x, &y), father[x] = y; root = y; while ( father[root] ){ root = father[root]; } Tree_Dp( root ); printf( "%d\n", max( dp[root][1], dp[root][0])); } return 0;}
阅读全文
0 0
- POJ2342[Anniversary party] 树上动态规划
- 树形动态规划 hdu1502 poj2342 Anniversary party
- POJ2342 HDU1520 Anniversary party
- poj2342 Anniversary party
- poj2342 Anniversary party
- POJ2342 Anniversary party
- poj2342 Anniversary party 题解
- 【poj2342】Anniversary party
- poj2342 Anniversary party
- 【poj2342】 Anniversary party
- TreeDp POJ2342 Anniversary party
- POJ2342:Anniversary party(树形DP)
- poj2342 Anniversary party【树形dp】
- POJ2342 Anniversary party(树形DP)
- poj2342.Anniversary party(树形dp)
- POJ2342 Anniversary party 【树形dp】
- poj2342 Anniversary party (树形DP)
- POJ2342 Anniversary party(树形dp)
- SUN SPARC T4-4电源故障引起的宕机
- Android数据统计柱状图、折线图 MPAndroidChart
- List集合中的对象根据属性排序
- Android技术之使用Handler引发的内存泄露
- random.py文件
- POJ2342[Anniversary party] 树上动态规划
- .Hex和.Bin的区别
- Android开发从零0到1024基础篇(0)AndroidStudio的安装,配置
- 遗传算法(C#)
- TCP协议的"三次握手"和"四次挥手"
- 十进制(10)与64进制互相转换算法
- Windows10有线网卡无法上网的解决办法
- JQuery UI的使用
- 字符串基本操作