标签:输入数据 input col crp 数据 amp 理论 意义 size
Descrption
Input
Output
Sample Input
6 3
-2 3 -2 3 -1
2 3
4 5
0 6
0 0
0 0
0 0
Sample Output
4
Hint
分析
Code
#include <bits/stdc++.h>
const int maxn=100+5,Inf=0x3f3f3f3f;
struct Edge{int mum,dad,rp;}e[maxn];
bool vis[maxn][maxn];//记忆化用,因为人品值可负可正,需要一个数组来标记状态
int dp[maxn][maxn],n,k;
int dfs(int u,int cnt){//u为根的子树选cnt个节点
if(vis[u][cnt])return dp[u][cnt];//记忆化
if(!cnt)return dp[u][cnt]=0;//一个都不选人品为0
if(!u)return dp[u][cnt]=-Inf;//u==0表示为空
if(cnt==1)return dp[u][cnt]=e[u].rp;//只选一个选根就行
int ans=-Inf;
for(int i=0;i<cnt;++i)//枚举左右子树选的个数
ans=std::max(ans,e[u].rp+dfs(e[u].mum,i)+dfs(e[u].dad,cnt-i-1));
vis[u][cnt]=1;
return dp[u][cnt]=ans;
}
void Solve(){
scanf("%d%d",&n,&k);
for(int i=2;i<=n;++i)
scanf("%d",&e[i].rp);
for(int i=1;i<=n;++i)
scanf("%d%d",&e[i].mum,&e[i].dad);
printf("%d\n",dfs(1,k+1));
}
int main() {
Solve();
return 0;
}
标签:输入数据 input col crp 数据 amp 理论 意义 size
原文地址:https://www.cnblogs.com/hbhszxyb/p/13283000.html