HDU 1520 Anniversary party-----树形DP
来源:互联网 发布:公司网络环境搭建 编辑:程序博客网 时间:2024/04/27 13:24
dp[i][0]表示 i点 不取
dp[i][1]表示 i点取
j为i的子节点
则 dp[i][0] += max(dp[j][0],dp[j][1]);
dp[i][1] += dp[j][0];
(j 子节点有很多)
如果 a 为根节点,结果就是 max(dp[a][0],dp[a][1]);
用 vector 写得邻接表。。
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>#include<vector>using namespace std;vector<int> adj[6050];int h[6001],dp[6001][2],f[6050];void dfs(int p){dp[p][1]=h[p];int len=adj[p].size();for(int i=0;i<len;i++){dfs(adj[p][i]);}for(int i=0;i<len;i++){dp[p][0]+=max(dp[adj[p][i]][0],dp[adj[p][i]][1]);//重要!!dp[p][1]+=dp[adj[p][i]][0];}}int main(){int n;while(scanf("%d",&n)!=EOF){int i,j,k;for(i=1;i<=n;i++){scanf("%d",&h[i]);f[i]=-1;adj[i].clear();dp[i][0]=0;dp[i][1]=0;}int a,b;while(scanf("%d%d",&a,&b),a||b){f[a]=b;adj[b].push_back(a);}a=1;while(f[a]!=-1) a=f[a];dfs(a);printf("%d\n",max(dp[a][0],dp[a][1]));}}
- 树形DP---hdu 1520 Anniversary Party
- HDU 1520 Anniversary party(树形DP入门)
- HDU 1520 Anniversary party-----树形DP
- hdu(1520) Anniversary party(树形dp)
- 【树形DP】 HDU 1520 Anniversary party
- HDU 1520 Anniversary party(简单树形dp)
- HDU 1520 Anniversary party 树形DP
- HDU 1520 Anniversary party (树形DP)
- hdu 1520 Anniversary party(树形dp)
- HDU 1520 Anniversary party(树形DP)
- hdu 1520 Anniversary party(基本树形DP)
- HDU 1520 Anniversary party (树形dp)
- HDU 1520 Anniversary party / 树形DP水题!!!
- hdu 1520 Anniversary party(树形dp)
- hdu 1520Anniversary party(简单树形dp)
- 【树形DP】hdu 1520 Anniversary party
- HDU 1520 - Anniversary party (树形DP)
- poj2342|hdu 1520 Anniversary party 树形dp
- 消息队列操作 (linux)
- git 忽略某些文件
- 404:No result defined for action and result input
- 大大
- 高斯分布公式
- HDU 1520 Anniversary party-----树形DP
- java.lang.OutOfMemoryError: PermGen space及其解决方法
- JavaScript 中的 exec 函数
- Visual Studio 调试小技巧-从查看窗口得到更多信息
- javaScript 中的 push 函数
- 实战博客园访问流量计数器
- spice server watch机制
- Photoshop CS6安装错误Exit Code: 34
- 题目1508:把字符串转换成整数