标签:des style io ar color os sp for java
7 1 1 1 1 1 1 1 1 3 2 3 6 4 7 4 4 5 3 5 0 0
5
题意:公司party,n个人的活跃值给出来,然后告诉职位等级关系,并且职员和直接上司不能同时参加,求最多可以有多少人参加
#include <iostream>
#include <stdio.h>
#include <string>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#define N 6009
using namespace std;
int n;
vector<int>v[N];
int dp[N][2];//布尔型数组
int fa[N];
int f[N];
void dfs(int node)
{
int len=v[node].size();
dp[node][1]=f[node];
for(int i=0;i<len;i++)
dfs(v[node][i]);
for(int i=0;i<len;i++)
{
dp[node][1]+=dp[v[node][i]][0];//上司出席则职员一定不出席
dp[node][0]+=max(dp[v[node][i]][0],dp[v[node][i]][1]);//上司不出席则职员可能出席也可能不出席
}
}
int main()
{
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
{
scanf("%d",&f[i]);
v[i].clear();
dp[i][0]=dp[i][1]=0;
fa[i]=-1;
}
int a,b;
while(~scanf("%d%d",&a,&b))
{
if(a==0&&b==0) break;
fa[a]=b;
v[b].push_back(a);
}
a=1;
while(fa[a]!=-1) a=fa[a];
dfs(a);
printf("%d\n",max(dp[a][0],dp[a][1]));
}
return 0;
}
HDU 1520Anniversary party 树形DP入门
标签:des style io ar color os sp for java
原文地址:http://blog.csdn.net/wust_zjx/article/details/41756251