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

hdu The more, The Better

时间:2015-05-27 15:55:25      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:dp

把0作为根,然后dp

注意一点  就是以前是选取m个点 现在相当于选取了m+1个点


#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;

int dp[222][222];
vector<int>mp[222];
int val[222];
int vis[222];
int n,m;

void dfs(int u){

    vis[u]=1;


    dp[u][1]=val[u];


    for(int i=0;i<mp[u].size();i++){

        int v = mp[u][i];

        if(vis[v]) continue;

        dfs(v);

        for(int j=m+1;j>1;j--){
            for(int k=1;k<j;k++){
                dp[u][j]=max(dp[u][j],dp[u][j-k]+dp[v][k]);
            }
        }
    }

}

int main(){
    while(scanf("%d%d",&n,&m)==2){
        if(n==0&&m==0) break;

        for(int i=0;i<=n;i++){
            mp[i].clear();
        }

        for(int i=1;i<=n;i++){
            int a,b;
            scanf("%d%d",&a,&b);
            mp[a].push_back(i);
            val[i]=b;
        }

        memset(dp,0,sizeof(dp));
        memset(vis,0,sizeof(vis));


        vis[0]=1;

        dfs(0);

        printf("%d\n",dp[0][m+1]);
    }
}


hdu The more, The Better

标签:dp

原文地址:http://blog.csdn.net/u013076044/article/details/46046261

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