树形dp
Posted ls-pankong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树形dp相关的知识,希望对你有一定的参考价值。
入门:
题意:杭电1520
先输入n个人,接下来n行输入他们的快乐值,再接下来输入一些数对<a,b>,表示b是a的上司(别看反了)!
要求直属上司和员工不能同时出席宴会,求宴会最大的快乐值。
import java.util.*; public class Main8 { static Vector<int[]>v=new Vector<int[]>(); static int par[]=new int[6001]; static int son[]=new int[6001]; static int dp[][]=new int[6001][2]; static int vis[]=new int[6001]; static int n; public static void dfs(int root){ vis[root]=1; for(int i=1;i<=n;i++){ if(vis[i]==0&&par[i]==root){ dfs(i); dp[root][1]+=dp[i][0]; dp[root][0]+=Math.max(dp[i][0], dp[i][1]); } } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = sc.nextInt(); int a ,b; for(int i=1;i<=n;i++) dp[i][1]=sc.nextInt(); while(true){ a= sc.nextInt(); b = sc.nextInt(); if(a==0&&b==0) break; son[a]++; par[a]=b; } for(int i=1;i<=n;i++){ if(son[i]==0){ a=i; //找到根节点 break; } } dfs(a); System.out.println(Math.max(dp[a][0], dp[a][1])); } }
以上是关于树形dp的主要内容,如果未能解决你的问题,请参考以下文章
Starship Troopers(HDU 1011 树形DP)