树形DP
树形 DP,即在树上进行的 DP。由于树固有的递归性质,树形 DP 一般都是递归进行的。
例题
没有上司的舞会 洛谷1352
#include<bits/stdc++.h>
using namespace std;
int n,i,x,y,b[6005],f[6005][2];
vector<int>a[6005];
void sc(int x)
{
for (int i=0;i<a[x].size();i++)
{
int to=a[x][i];
sc(to);
f[x][0]=f[x][0]+max(f[to][0],f[to][1]);
f[x][1]=f[x][1]+f[to][0];
}
}
int main()
{
cin>>n;
for (i=1;i<=n;i++)
cin>>f[i][1];
for (i=1;i<n;i++)
{
cin>>x>>y;
a[y].push_back(x);
b[x]=1;
}
for (i=1;i<=n;i++)
if (!b[i])
break;
sc(i);
cout<<max(f[i][0],f[i][1])<<'\n';
}
标签:6005,递归,int,树形,例题,DP
From: https://www.cnblogs.com/ShadowAA/p/17320820.html