luogu 选课

来源:互联网 发布:视频大数据分析系统 编辑:程序博客网 时间:2024/05/23 21:34

题目

#include<cstdio>#include<algorithm>using namespace std;int head[305],n,m,f[305][305],pre[305];void dp(int x){    for(int i=head[x];i;i=pre[i])    {        dp(i);        for(int j=m+1;j>1;--j)        {            for(int k=j-1;k>=1;--k)            {                f[x][j]=max(f[x][j],f[x][j-k]+f[i][k]);                //枚举当前儿子选k个,剩下的j-k个就从别的地方拿            }        }    }}int main(){    scanf("%d%d",&n,&m);    for(int i=1;i<=n;++i)    {        int father,value;        scanf("%d%d",&father,&value);        f[i][1]=value;        pre[i]=head[father];        head[father]=i;    }    dp(0);    printf("%d\n",f[0][m+1]);    return 0;}