HDU 1561。这道是树形DP了,所谓依赖背包,就是选A前必须选B,这样的问题。1561很明显是这样的题了。把0点当成ROOT就好,然后选子节点前必须先选根,所以初始化数组每一行为该根点的值。由于多选了0点,所以记得把m++.

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int MAXN=222; int dp[MAXN][MAXN];
struct Edge{
int u,v,next;
}edge[MAXN];
int head[MAXN],n,m,tot; void addedge(int u,int v){
edge[tot].u=u;
edge[tot].v=v;
edge[tot].next=head[u];
head[u]=tot++;
} void dfs(int u){
for(int e=head[u];e!=-1;e=edge[e].next){
int v=edge[e].v;
dfs(v);
for(int i=m;i>=1;i--){
for(int k=1;k<i;k++){
dp[u][i]=max(dp[u][i],dp[u][i-k]+dp[v][k]);
}
}
}
} int main(){
int u,v;
while(scanf("%d%d",&n,&m),n||m){
m++;
memset(dp,0,sizeof(dp));
memset(head,-1,sizeof(head));
tot=0;
for(int i=1;i<=n;i++){
scanf("%d%d",&u,&v);
addedge(u,i);
for(int k=1;k<=m;k++)
dp[i][k]=v;
}
dfs(0);
printf("%d\n",dp[0][m]);
}
return 0;
}

  

HDU 3449.。也是这样的题目,选物品前先买盒子。那么设dp[i][j]为前i个盒子钱为j下最优值。把每个盒子情况当成0/1背包来看。由于先买了盒子,所以初始化时是i-1情况下j-p的最优值。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; int dp[52][100050]; int main(){
int n,w,p,k,wi,vi;
while(scanf("%d%d",&n,&w)!=EOF){
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++){
scanf("%d%d",&p,&k);
for(int j=p;j<=w;j++){
dp[i][j]=dp[i-1][j-p];
}
for(int kk=1;kk<=k;kk++){
scanf("%d%d",&wi,&vi);
for(int j=w;j>=wi+p;j--){
dp[i][j]=max(dp[i][j],dp[i][j-wi]+vi);
}
}
for(int j=0;j<=w;j++)
dp[i][j]=max(dp[i][j],dp[i-1][j]);
}
printf("%d\n",dp[n][w]);
}
return 0;
}

  

HDU 1561&HDU 3449 一类简单依赖背包问题的更多相关文章

  1. HDU 1561 树形DP(入门)

    题目链接:  HDU 1561 The more, The Better #include <iostream> #include <cstdio> #include < ...

  2. HDU 1561 The more, The Better(树形背包)

    The more, The Better Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  3. HDU - 2222,HDU - 2896,HDU - 3065,ZOJ - 3430 AC自动机求文本串和模式串信息(模板题)

    最近正在学AC自动机,按照惯例需要刷一套kuangbin的AC自动机专题巩固 在网上看过很多模板,感觉kuangbin大神的模板最为简洁,于是就选择了用kuangbin大神的模板. AC自动机其实就是 ...

  4. CJOJ 2022 【一本通】简单的背包问题(搜索)

    CJOJ 2022 [一本通]简单的背包问题(搜索) Description 设有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,-wn. 问能否从这n件物品中选择若干件放入 ...

  5. 【动态规划】【C/C++】简单的背包问题

    简单的背包问题 背包问题动态规划中非常经典的一个问题,本文只包含01背包,完全背包和多重背包.更加详尽的背包问题的讲解请参考崔添翼大神的<背包九讲> 简单的01背包 问题导入:新年到了,m ...

  6. HDU 1009 FatMouse' Trade(简单贪心 物品可分割的背包问题)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1009 FatMouse' Trade Time Limit: 2000/1000 MS (Java/O ...

  7. HDU 1561 The more, The Better【树形DP/有依赖的分组背包】

    ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物.但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先 ...

  8. HDU 1561:The more, The Better(有依赖的树型背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=1561 题意:有n个点,容量为m,每个点有一个价值,还给出n条边,代表选第i个点之前必须先选ai,问最多的价值能取 ...

  9. hdu 1561 The more, The Better 背包型树形DP 简单题

    The more, The Better Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

随机推荐

  1. ASP.NET MVC5 之 Log4Net 的学习和使用

    最近在学习 log4Net 插件,在博客园找到了好多资料,但是实现起来还是有点麻烦. 现在记录下学习的过程,期间可能加载着借鉴和转载的代码. 1.配置文件的设置: 新建config文件夹下 log4n ...

  2. Hadoop基础(二)

    HDFS 读写流程 我们知道在HDFS中我们的文件按数据块进行存储,那么当我们写入或者读取一个文件的时候HDFS到底进行了哪些操作呢? HDFS 写流程 如上图所示,假如我们有一个四个节点的集群,并且 ...

  3. [ BZOJ 2134 ] 单选错位

    \(\\\) \(Description\) 一共\(N​\)道题目,第\(i​\)道题有\(A_i​\)个选项,现在有一个人做完了所有题目,但将每一道题的答案都写到了下一道题的位置\((​\)第\( ...

  4. react杂记

    React webpack+react (hello world) 项目结构: src: app.js main.js package.json webpack_dev_config.js 需要安装包 ...

  5. 图解TCP/IP笔记(1)——TCP/IP协议群

    转载请注明:https://www.cnblogs.com/igoslly/p/9167916.html TCP/IP制定  制定:IETF 记录:RFC - Request for comment ...

  6. Resources.getResourceAsReader 报空指针

    1.maven项目中 可能未编译 导致找不到, 解决方法:mvn clean install -DskipTests -X   编译一下项目 2.可能在 Resources.getResourceAs ...

  7. linux启动时开启screen

    编辑/etc/rc.local 添加 su - ubuntu -c 'screen -dmS ss zserver -p /etc/config'

  8. (转)postgis常用函数介绍(一)

    http://blog.csdn.net/gisshixisheng/article/details/47701237 概述: 在进行地理信息系统开发的过程中,常用的空间数据库有esri的sde,po ...

  9. 宏基因组扩增子图表解读2散点图:组间整体差异分析(Beta多样性)

    散点图 数据点在直角坐标系平面上的分布图.在宏基因组领域,散点图常用于展示样品组间的Beta多样性,常用的分析方法有主成分分析(PCA),主坐标轴分析(PCoA/MDS)和限制条件的主坐标轴分析(CP ...

  10. Python 函数 day3

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这 ...