zoukankan      html  css  js  c++  java
  • 邱老师玩游戏(树形DP) UESTC

    邱老师最近在玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中邱老师允许攻克M个城堡并获得里面的宝物。

    但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先攻克其他某一个特定的城堡。你能帮邱老师算出要获得尽量多的宝物应该攻克哪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
    对于每个测试实例,输出一个整数,代表邱老师攻克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

    //第一次做树形DP还是比较有意思的,dp[i][j] 代表在i 节点选 j 个的最大收益,滚动数组省空间,还有就是 m++ 很关键,因为0节点算进去了

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define MX 205
     4 
     5 int n,m;
     6 int dp[MX][MX];
     7 int b[MX];
     8 int vis[MX];
     9 vector<int> tree[MX];
    10 
    11 void dfs(int x)
    12 {
    13     if (vis[x])return ;
    14     vis[x]=1;
    15     dp[x][1]=b[x];
    16     for (int i=0;i<tree[x].size();i++)
    17     {
    18         int v = tree[x][i];
    19         dfs(v);
    20         for (int j=m;j>=0;j--)
    21         {
    22             for (int k=0;k<j;k++)
    23                 dp[x][j] = max(dp[x][j],dp[v][k]+dp[x][j-k]);
    24         }
    25     }
    26 }
    27 
    28 int main()
    29 {
    30     while (scanf("%d%d",&n,&m)!=EOF)
    31     {
    32         if (n==0&&m==0) break;
    33         m++;
    34         for (int i=0;i<=n;i++) tree[i].clear();
    35         memset(vis,0,sizeof(vis));
    36         memset(dp,0,sizeof(dp));
    37         for (int i=1;i<=n;i++)
    38         {
    39             int a;
    40             scanf("%d%d",&a,&b[i]);
    41             tree[a].push_back(i);
    42         }
    43         dfs(0);
    44         printf("%d
    ",dp[0][m]);
    45     }
    46     return 0;
    47 }
    View Code
  • 相关阅读:
    一个表对应另一个表中多个主键的查询方法(把一个表当成两个表用)
    可以切换数据库的SqlHelper
    win7安装后的用户选择
    如何删除 Windows.old 文件夹
    Windows Server 2008磁盘清理工具
    sqlserver express版PRIMARY 大小不能超过4G
    一交换机,一光猫、一路由器组internet网的方法
    公司部门职责清晰
    IIS下载EXE(拾遗)
    win2008 IIS 7.0中WebDAV
  • 原文地址:https://www.cnblogs.com/haoabcd2010/p/6930678.html
Copyright © 2011-2022 走看看