hdu 1561 The more, The Better (依赖背包 树形dp)
题目:
链接:点击打开链接
题意:
非常明显的依赖背包。
思路:
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)的更多相关文章
- HDU 1561 The more, The Better (有依赖背包 || 树形DP)
题目链接 Problem Description ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物.但由于地理位 ...
- 【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 ...
- HDU 4616 Game (搜索)、(树形dp)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4616 这道题目数据可能比较弱,搜索都可以AC,但是不敢写,哎…… 搜索AC代码: #include & ...
- HDU - 1054 Strategic Game(二分图最小点覆盖/树形dp)
d.一颗树,选最少的点覆盖所有边 s. 1.可以转成二分图的最小点覆盖来做.不过转换后要把匹配数除以2,这个待细看. 2.也可以用树形dp c.匈牙利算法(邻接表,用vector实现): /* 用ST ...
- HDU 4003 Find Metal Mineral(分组背包+树形DP)
题目链接 很棒的一个树形DP.学的太渣了. #include <cstdio> #include <string> #include <cstring> #incl ...
- hdu 4044 2011北京赛区网络赛E 树形dp ****
专题训练 #include<stdio.h> #include<iostream> #include<string.h> #include<algorithm ...
- CH 5402 选课(分组背包+树形DP)
CH 5402 选课 \(solution:\) 很有讨论套路的一道题,利用树的结构来表示出不同课程之间的包含关系(这里还要建一个虚点将森林变成一颗打大树).然后用子树这个概念巧妙的消除了因为这些包含 ...
- P1273 有线电视网[分组背包+树形dp]
题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点. 从转播站到转播站以及从 ...
- HDU 2196 Computer (树上最长路)【树形DP】
<题目链接> 题目大意: 输出树上每个点到其它点的最大距离. 解题分析: 下面的做法是将树看成有向图的做法,计算最长路需要考虑几种情况. dp[i][0] : 表示以i为根的子树中的结点与 ...
随机推荐
- EasyUI - 后台管理系统 - 增加,删除,修改
效果: html代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ad ...
- C++基础学习笔记----第四课(函数的重载、C和C++的相互调用)
本节主要讲了函数重载的主要概念以及使用方法,还有C和C++的相互调用的准则和具体的工程中的使用技巧. 函数重载 1.基本概念 函数重载就是用同一个函数名来定义不同的函数.使用不同的函数参数来搭配同一个 ...
- JS - 侧边导航收缩伸展
下载地址:http://www.lanrentuku.com/js/daohang-1162.html
- heap表和iot表排序规则不同
heap 和iot 对比 OBJECT_NAME OBJECT_TYPE --------------------------------------------------------------- ...
- Linux IP代理筛选系统(shell+proxy)
代理的用途 其实,除了抓取国外网页需要用到IP代理外,还有很多场景会用到代理: 通过代理访问一些国外网站,绕过被某国防火墙过滤掉的网站 使用教育网的代理服务器,可以访问到大学或科研院所的内部网站资源 ...
- Android Sip学习(三)Android Voip实现
Android Sip学习(三)Android Voip实现 Android Sip学习(准备知识)SIP 协议完整的呼叫流程 Android Sip学习(一)Android 2.3 APIs S ...
- cocos2d-x游戏开发系列教程-搭建cocos2d-x的windows开发环境
1.在上一篇中我们成功运行了HelloCpp和TestCpp工程,我们到目录cocos2d-x-2.2.1\Debug.win32下 查看生成的文件,在我电脑上绝对路径是H:\source\cocos ...
- 【状态DP】 HDU 1074 Doing Homework
原题直通车:HDU 1074 Doing Homework 题意:有n门功课需要完成,每一门功课都有时间期限t.完成需要的时间d,如果完成的时间走出时间限制,就会被减 (d-t)个学分.问:按怎样 ...
- Html网页表格结构化标记的应用
在讲网页表格的结构化标记之前,还是先看几幅图片. Html表格的结构化 所谓的结构化,正如上述第一副图所看到的,就是把我们的表格划分为三种:表头.表体.表尾.从而当我们在改动表体部分的时候,不会影响到 ...
- MongoDB学习笔记(一)
MongoDB的介绍我就不说了.直接开始环境的搭建和连接.在这个之前,向大家介绍几个关于MongoDB的网站. 1. https://www.mongodb.com/ MongoDB的官网. 2. ...