JZOJ 3914. 人品问题
Posted zjzjzj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JZOJ 3914. 人品问题相关的知识,希望对你有一定的参考价值。
题目
分析
- 暴力分还是很足的 50
- 正解是一个树形DP
- 对于一个根节点来说,可能有多种分配情况需要一个枚举就好了
- 加一个记忆化加快时间
代码
1 #include<iostream> 2 using namespace std; 3 struct sb 4 { 5 int val,f,m; 6 }a[1001]; 7 int v[1001][1001],f[1001][1001]; 8 int dp(int x,int sum) 9 { 10 if (v[x][sum]) return f[x][sum]; 11 if (!sum) return f[x][sum]=0; 12 if (!x) return f[x][sum]=-1e9; 13 if (sum==1) return f[x][sum]=a[x].val; 14 int ans=-1e9; 15 for (int i=0;i<sum;i++) 16 ans=max(ans,a[x].val+dp(a[x].f,i)+dp(a[x].m,sum-i-1)); 17 v[x][sum]=1; 18 f[x][sum]=ans; 19 return ans; 20 } 21 int main () 22 { 23 int n,k; 24 cin>>n>>k; 25 for (int i=2;i<=n;i++) 26 cin>>a[i].val; 27 for (int i=1;i<=n;i++) 28 cin>>a[i].f>>a[i].m; 29 cout<<dp(1,k+1); 30 }
以上是关于JZOJ 3914. 人品问题的主要内容,如果未能解决你的问题,请参考以下文章