码迷,mamicode.com
首页 > 其他好文 > 详细

luogu 2014 选课 树上背包

时间:2018-09-25 01:33:10      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:i++   back   include   col   ++   pac   pre   vector   \n   

树上背包

#include<bits/stdc++.h>

using namespace std;

const int N=310;
const int inf=0x3f3f3f3f;
vector<int> son[N];
int f[N][N],s[N],n,m;

void dfs(int u){
    f[u][0]=0;
    for(int i=0;i<son[u].size();i++){
        int v=son[u][i];
        dfs(v);
        for(int j=m;j>0;j--)
        for(int k=j;k>=0;k--)
        if(j-k>=0) 
        f[u][j]=max(f[u][j],f[u][j-k]+f[v][k]);
    }
    if(u!=0){
        for(int i=m;i>0;i--)
        f[u][i]=f[u][i-1]+s[u];
    }
}

int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        int x;
        cin>>x>>s[i];
        son[x].push_back(i);
    }
    memset(f,-inf,sizeof f);
    dfs(0);
    printf("%d\n",f[0][m]);
}

 

luogu 2014 选课 树上背包

标签:i++   back   include   col   ++   pac   pre   vector   \n   

原文地址:https://www.cnblogs.com/asdic/p/9697183.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!