标签:输入数据 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