hdu The more, The Better

来源:互联网 发布:java pathfinder下载 编辑:程序博客网 时间:2024/06/07 21:02

把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]);    }}


0 0
原创粉丝点击