zoukankan      html  css  js  c++  java
  • hdu 1561(树形dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1561

    思路:dp[u][i]表示以u为根的树选了i个子节点。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<vector>
     6 using namespace std;
     7 #define MAXN 222
     8 
     9 int n,m;
    10 int dp[MAXN][MAXN];
    11 int val[MAXN];
    12 vector<vector<int> >G;
    13 
    14 void dfs(int u,int father)
    15 {
    16     for(int i=0;i<G[u].size();i++){
    17         int v=G[u][i];
    18         if(v==father)continue;
    19         dfs(v,u);
    20         for(int j=m;j>=1;j--){
    21             for(int k=1;k<=j;k++){
    22                 dp[u][j]=max(dp[u][j],dp[u][j-k]+dp[v][k]);
    23             }
    24         }
    25     }
    26     if(u!=0){
    27         for(int j=m;j>=1;j--){
    28             dp[u][j]=dp[u][j-1]+val[u];
    29         }
    30     }
    31 }
    32 
    33 int main()
    34 {
    35     int u,w;
    36     while(~scanf("%d%d",&n,&m)){
    37         if(n==0&&m==0)break;
    38         G.clear();
    39         G.resize(n+2);
    40         for(int i=1;i<=n;i++){
    41             scanf("%d%d",&u,&w);
    42             G[u].push_back(i);
    43             val[i]=w;
    44         }
    45         memset(dp,0,sizeof(dp));
    46         dfs(0,-1);
    47         printf("%d
    ",dp[0][m]);
    48     }
    49     return 0;
    50 }
    51 
    52 
    53 
    54         
    55             
    56 
    57         
    View Code
  • 相关阅读:
    代码面试最常用的10大算法
    ant google compiler 压缩
    美工资源
    面试题
    validate表单验证插件
    laypage分页
    layer弹出框小结
    Thymeleaf
    webApp开发
    grunt自动化构建工具
  • 原文地址:https://www.cnblogs.com/wally/p/3313593.html
Copyright © 2011-2022 走看看