树形DP
来源:互联网 发布:西部世界解析 知乎 编辑:程序博客网 时间:2024/06/11 02:04
树形DP
【例题】
政府邀请了你在火车站开饭店,但不允许同时在两个相连接的火车站开。任意两个火车站有且只有一条路径,每个火车站最多有50个和它相连接的火车站。告诉你每个火车站的利润,问你可以获得的最大利润为多少。
例如下图是火车站网络:
最佳投资方案是在1,2,5,6这4个火车站开饭店可以获得利润为90
输入样例 Maximum profit.in
6
10
20
25
40
30
30
4 5
1 3
3 4
2 3
6 4
输出样例 Maximum profit.out
90
【分析】
这一题所运用的主要思想就是树形DP,我们可以将题目简化成一个很明显的条件:把整张图看成一棵树,那么每一个点的状态就是选与不选所得利益的max。那么我们就可以以编号1为根节点,通过DFS+DP来实现这一过程。
如下:
void dfs(int now) { b[now]=true; f[now][1] = v[now]; int len = adj[now].size(); for( int i=0; i<len; i++) if(b[adj[now][i]]==false) { int x = adj[now][i]; dfs(x); f[now][0]+=max(f[x][1],f[x][0]); f[now][1]+=f[x][0]; } return ;}
通常树形DP题都是这样做,难就难在状态转移上。
0 0
- 树形dp
- 树形DP
- 树形dp
- 树形DP
- 树形dp
- 树形DP
- 树形DP
- 树形DP
- 树形DP
- 树形dp
- 树形dp
- 树形dp
- 树形dp
- 树形DP
- 树形DP
- 树形DP
- 树形DP
- 树形dp
- 【Spring】使用Spring发送邮件
- AngularJS路由 $state服务、路由事件、获取路由参数
- ZOJ2208-To and Fro
- TextView 加边框
- 彻底理解python中函数内赋值操作和对象的可变性
- 树形DP
- Android之用命令uninstall卸载apk和用 -i 过滤日志忽略大小写
- 《JavaScript》*****src路径属性
- Easybet88 Online Casino Malaysia VIP Chip Redemption(Easybet88, Easybet88 Online, Sportbook, VIP Chi
- 洛谷P3369 普通平衡树(Treap/Splay)
- 选择排序算法
- Reporting Service 2012 体系结构
- C#用DesignSurface实现一个简单的窗体设计器
- 经典三层架构