lalalala


私信TA

用户名:zhangshuo

访问量:152018

签 名:

像狗一样的学习,像绅士一样地玩耍。

等  级
排  名 6
经  验 30160
参赛次数 10
文章发表 201
年  龄 12
在职情况 学生
学  校 芜湖市第十一中学
专  业

  自我简介:

今日懒惰流下的口水,将会成为明日里伤心的泪水。

解题思路:





注意事项:





参考代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 320;
int f[maxn][maxn],bro[maxn],son[maxn],v[maxn];
void add(int fa, int s)
{
    bro[s] = son[fa];
    son[fa] = s;
}
int dp(int i, int j)
{    
if (i == -1) return 0;    
if (j == 0) return 0;    
if (f[i][j] != -1) return f[i][j];    
int m = -1<<30; //最小值 

    // 全分兄弟
    m = max( m, dp(bro[i] , j));    
    for (int k = 0; k <= j-1; k++)
    {
        m = max( m , dp(son[i] , k) + dp(bro[i] , j-1-k) + v[i]);
    }
    f[i][j] = m;    
    return m;
}
    int main()
    {    
        memset(son , -1, sizeof(son));    
        memset(bro , -1, sizeof(bro));    
        memset(f   , -1, sizeof(f  ));    
        int n, m;    
        cin>>n>>m;    
        for(int i=1;i<=n;i++)
        {        
        int fa,vx;        
        cin>>fa>>vx;
        add(fa,i);
        v[i] = vx;
    }    
        cout<<dp(0, m+1);    
        return 0;
}


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区