zoukankan      html  css  js  c++  java
  • HDOJ 1561 The more, The Better


    树形DP。。。。

    The more, The Better

    Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 4394    Accepted Submission(s): 2604


    Problem Description
    ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物。但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先攻克其他某一个特定的城堡。你能帮ACboy算出要获得尽量多的宝物应该攻克哪M个城堡吗?
     

    Input
    每个测试实例首先包括2个整数,N,M.(1 <= M <= N <= 200);在接下来的N行里,每行包括2个整数,a,b. 在第 i 行,a 代表要攻克第 i 个城堡必须先攻克第 a 个城堡,如果 a = 0 则代表可以直接攻克第 i 个城堡。b 代表第 i 个城堡的宝物数量, b >= 0。当N = 0, M = 0输入结束。
     

    Output
    对于每个测试实例,输出一个整数,代表ACboy攻克M个城堡所获得的最多宝物的数量。
     

    Sample Input
    3 2
    0 1
    0 2
    0 3
    7 4
    2 2
    0 1
    0 4
    2 1
    7 1
    7 6
    2 2
    0 0
     

    Sample Output
    5
    13
     

    Author
    8600
     

    Source
     

    Recommend
    LL
     
     



    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <vector>

    using namespace std;

    int dp[222][222],n,m,valu[222];
    vector<int> g[222];

    void dfs(int u)
    {
        for(int i=0;i<g.size();i++)
        {
            int v=g;
            dfs(v);
            for(int j=m;j>=0;j--)
            {
                for(int k=0;k<=j;k++)
                {
                    dp[j]=max(dp[j],dp[j-k]+dp[v][k]);
                }
            }
        }
       for(int j=m+1;j>=1;j--)
            dp[j]=dp[j-1]+valu;
    }

    int main()
    {
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            if((n||m)==0break;
            memset(dp,0,sizeof(dp));
            for(int i=0;i<=n;i++)
                g.clear();
            for(int i=1;i<=n;i++)
            {
                int a,b;
                scanf("%d%d",&a,&b);
                g[a].push_back(i);
                valu=b;
            }
            dfs(0);
            printf("%d ",dp[0][m+1]);
        }
        return 0;
    }
    * This source code was highlighted by YcdoiT. ( style: Emacs )

  • 相关阅读:
    高精度模板(未完待续)
    $CH0201$ 费解的开关
    $POJ2288$ $Islands$ $and$ $Bridges$
    luoguP1445 [Violet]樱花
    P3694 邦邦的大合唱站队
    [NOI2009]管道取珠
    [AHOI2006]基因匹配
    luogu P3411 序列变换
    HNOI2001 产品加工
    牛客ACM赛 B [小a的旅行计划 ]
  • 原文地址:https://www.cnblogs.com/CKboss/p/3350825.html
Copyright © 2011-2022 走看看