题目:

链接:点击打开链接

题意:

非常明显的依赖背包。

思路:

dp[i][j]表示以i为根结点时攻击j个城堡得到的最大值。(以i为根的子树选择j个点所能达到的最优值)

dp[root][j] = max(dp[root][j],dp[root][k]+dp[u][j-k]);

u递归根结点,root当前根结点,每一个城堡之间的依赖关系形成森林。应该转化为树。再树形dp。仅仅需添加一个根结点即可。m++。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 220 int num[MAXN];
int map[MAXN][MAXN];//存树
int dp[MAXN][MAXN];
int vis[MAXN];
int n,m; void dfs(int root)
{
vis[root] = 1;
for(int i=1; i<=num[root]; i++)
{
int u = map[root][i];
if(!vis[u])
dfs(u);
for(int j=m; j>=2; j--)
{
for(int k=1; k<j; k++)
{
if(dp[u][j-k] != -1 && dp[root][k] != -1)
dp[root][j] = max(dp[root][j],dp[root][k]+dp[u][j-k]);
}
}
}
} int main()
{
//freopen("input.txt","r",stdin);
int a,b;
while(scanf("%d%d",&n,&m) != EOF && (n || m))
{
memset(vis,0,sizeof(vis));
memset(dp,0,sizeof(dp));
memset(num,0,sizeof(num));
for(int i=1; i<=n; i++)
{
scanf("%d%d",&a,&b);
dp[i][1] = b;
num[a]++;
map[a][num[a]] = i;
}
m++;
for(int i=0; i<=n; i++)
{
dp[i][0] = 0;
for(int j=2; j<=m; j++)
dp[i][j] = -1;
}
dfs(0);
printf("%d\n",dp[0][m]);
}
return 0;
}
</span>

-----------------------------------------------------------------------------------------

依赖背包的入门题。没可以自己写出来

---------------------------------------------------------------------------------------

战斗。永不停歇~~~~~~~~~~~~~~~~~~

hdu 1561 The more, The Better (依赖背包 树形dp)的更多相关文章

  1. HDU 1561 The more, The Better (有依赖背包 || 树形DP)

    题目链接 Problem Description ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物.但由于地理位 ...

  2. 【HDU 4276】The Ghost Blows Light(树形DP,依赖背包)

    The Ghost Blows Light Problem Description My name is Hu Bayi, robing an ancient tomb in Tibet. The t ...

  3. HDU 4616 Game (搜索)、(树形dp)

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4616 这道题目数据可能比较弱,搜索都可以AC,但是不敢写,哎…… 搜索AC代码: #include & ...

  4. HDU - 1054 Strategic Game(二分图最小点覆盖/树形dp)

    d.一颗树,选最少的点覆盖所有边 s. 1.可以转成二分图的最小点覆盖来做.不过转换后要把匹配数除以2,这个待细看. 2.也可以用树形dp c.匈牙利算法(邻接表,用vector实现): /* 用ST ...

  5. HDU 4003 Find Metal Mineral(分组背包+树形DP)

    题目链接 很棒的一个树形DP.学的太渣了. #include <cstdio> #include <string> #include <cstring> #incl ...

  6. hdu 4044 2011北京赛区网络赛E 树形dp ****

    专题训练 #include<stdio.h> #include<iostream> #include<string.h> #include<algorithm ...

  7. CH 5402 选课(分组背包+树形DP)

    CH 5402 选课 \(solution:\) 很有讨论套路的一道题,利用树的结构来表示出不同课程之间的包含关系(这里还要建一个虚点将森林变成一颗打大树).然后用子树这个概念巧妙的消除了因为这些包含 ...

  8. P1273 有线电视网[分组背包+树形dp]

    题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点. 从转播站到转播站以及从 ...

  9. HDU 2196 Computer (树上最长路)【树形DP】

    <题目链接> 题目大意: 输出树上每个点到其它点的最大距离. 解题分析: 下面的做法是将树看成有向图的做法,计算最长路需要考虑几种情况. dp[i][0] : 表示以i为根的子树中的结点与 ...

随机推荐

  1. Java面试题精选(三) JSP/Servlet Java面试逻辑题

    --   JSP/Servlet  Java面试逻辑题   --     很显然,Servlet/JSP的WEB前端动态制作的重要性比HTML/CSS/JS的价值高很多,但我们都知道他们都是建立在HT ...

  2. Qt录音程序

    源地址:http://www.oschina.net/code/snippet_1243295_48623 [代码] [C/C++]代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  3. Qt4_VS10 程序打包发布

    源地址:http://www.2cto.com/kf/201306/217205.html 目录结构如下: ---------------------------------------------- ...

  4. QT中.pro文件的写法

    QT中.pro文件的写法   qmake 变量 含义 #xxxx 注释, 从“#”开始,到这一行结束 SOURCES 指定源文件 SOURCES = *.cpp 对于多源文件,可用空格分开 SOURC ...

  5. maven生成war包的两种方式

    war包即对WEB应用程序进行打包,用于应用容器的部署.如在jboss中只要把war包丢入deploy目录下即可发布自己的应用了.打包方式有很多中,很多工具本身就支持此功能.下面主要介绍通过maven ...

  6. SpringMVC记住密码功能

    CookieTool (Cookie帮助类): package com.utcsoft.common.cookie; import java.util.HashMap; import java.uti ...

  7. ASP.NET - 记录错误日志

    不需要像log4net/Nlog/Common Logging配置,简单好用. 不用增加声明logger对象,可记录当前执行状况. 可以定义 维护功能模板的开发人员,以便用功能模块对于开发人员. 出处 ...

  8. Java描述语言、国家和地理的类——Locale

    Locale类代表一个特定的地理.语言和国家环境.一个Locale的实例对象本身不会验证它代表的语言和国家地区信息是否正确,只是向一些对国家和语言.地理等比较敏感的类提供国家地区语言信息,这些类有Da ...

  9. Eequal sum sets

    Let us consider sets of positive integers less than or equal to n. Note that all elements of a set a ...

  10. js / ajax 成功提交后怎么跳转到另外一个页面?

    把success那段改成 success : function (r) { if ( r.status == 'error' ){ alert(msg[r.msgno]); } else if (r. ...