poj2342 简单树形DP
来源:互联网 发布:淘宝刷流量收藏软件 编辑:程序博客网 时间:2024/03/29 14:16
题意就不说了,只要学过英语的,肯定能看懂。
首先分析一下,发现是一颗树,那么我们另
f[i][0]表示以i为根,i不去能达到的最大快乐值;f[i][1]表示以i为根,i参加聚会能达到的最大快乐值。
那么:
f[i][0]=sigma( max( f[i的孩子节点][0],f[i的孩子节点][1] ) );
f[i][1]=sigma(f[i的孩子节点][0])+val[i];
程序实现的时候,我先初始化:f[i][1]=val[i],f[i][0]=0;
#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define MAX 6111using namespace std;int root,n;int val[MAX],next[MAX],head[MAX],f[MAX][2];bool isson[MAX];void init(){ int i,j; int L,K; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&val[i]); } for(i=1;i<n;i++) { scanf("%d%d",&L,&K); next[L]=head[K]; head[K]=L; isson[L]=true; } for(i=1;i<=n;i++) if(!isson[i]) root=i;}void DP(int u){ if(!u) return ; int v; f[u][1]=val[u]; f[u][0]=0; for(v=head[u];v;v=next[v]) { DP(v); f[u][0]+=max(f[v][0],f[v][1]); f[u][1]+=f[v][0]; }}int main(){ int i,j; init(); DP(root); printf("%d\n",max(f[root][0],f[root][1])); return 0;}
0 0
- poj2342 简单树形DP
- POJ2342 简单树形dp
- poj2342 树形dp
- poj2342—树形dp
- poj2342树形dp
- 树形dp poj2342
- poj2342&&hdu1520(树形dp)
- poj2342 树形dp入门
- POJ2342(树形dp)
- poj2342(树形dp)
- POJ2342:Anniversary party(树形DP)
- poj3342 poj2342 树形dp入门
- poj2342 Anniversary party【树形dp】
- POJ2342 Anniversary party(树形DP)
- poj2342.Anniversary party(树形dp)
- 树形DP入门(POJ2342)
- POJ2342 Anniversary party 【树形dp】
- poj2342 Anniversary party (树形DP)
- arcpy.mapping 类列表
- Monkeyrunner 录制脚本&回放
- How to build mex file directly in Visual Studio 2010?
- HTML5中canvas实现小球击打小方块游戏
- div分层
- poj2342 简单树形DP
- java中synchronized用法
- 解决easyui datagrid 翻页全选的问题
- 潇雨菲回头这才注意到环
- wireshark 过滤条件
- C++中引用(&)的用法和应用实例
- 禁用百度地图的热点提示!
- 跪了,导出ios推送证书
- SUN官网上所有版本的jdk