一道背包的神题,用到了树上dp和背包dp,这个题的特殊性在于儿子对于父亲节点是有影响的,所以用f[i][j][k]表示第i号装备,其中用j个来合成上层装备,花费k元所能获得最大的力量值。

然后对于每一个节点枚举我选择合成几个,遍历每一个儿子节点,背包dp一下花费k元的最大力量值。注意这里的背包是一个分组背包,即对于每一个节点,我需要选择它的每一个叶子节点,这里每一个叶子都是一组物品(因为我需要枚举给每个叶子的花费),我需要选择每一组里的一个物品,所以是一个分组背包,最后用算出背包的g数组去更新f数组,同样是枚举话多少钱,把几个物品用于上层合成,然后转移状态。

——by VANE

#include<bits/stdc++.h>
using namespace std;
const int inf=1e9;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-') f=-f;ch=getchar();}
while(ch>=''&&ch<='') {x=x*-''+ch;ch=getchar();}
return f*x;
}
int n,m,ans,TOT,cnt;
int P[],L[],M[];
int f[][][];
int g[],h[];
char ch[];
int last[],deg[];
struct date{int to,next,v;}e[];
void insert(int u,int v,int w)
{
e[++cnt].to=v;e[cnt].next=last[u];
last[u]=cnt;e[cnt].v=w;deg[v]++;
}
void dp(int x)
{
if(!last[x])
{
L[x]=min(L[x],m/M[x]);
for(int i=;i<=L[x];++i)
for(int j=i;j<=L[x];++j)
f[x][i][j*M[x]]=(j-i)*P[x];
return;
}
L[x]=inf;
for(int i=last[x];i;i=e[i].next)
{
dp(e[i].to);
L[x]=min(L[x],L[e[i].to]/e[i].v);
M[x]+=e[i].v*M[e[i].to];
}
L[x]=min(L[x],m/M[x]); for(int l=L[x];l>=;--l)
{
memset(g,-0x3f3f3f3f,sizeof g);g[]=;
for(int i=last[x];i;i=e[i].next)
{
for(int j=m;j>=;--j)
{
int t=-1e9;
for(int k=;k<=j;++k)
t=max(t,g[j-k]+f[e[i].to][l*e[i].v][k]);
g[j]=t;
} }
for(int j=;j<=l;++j)
for(int k=;k<=m;++k)
f[x][j][k]=max(f[x][j][k],g[k]+P[x]*(l-j));
}
}
int main()
{
memset(f,-0x3f3f3f3f,sizeof f);
n=read();m=read();
for(int i=;i<=n;++i)
{
P[i]=read();
scanf("%s",ch);
if(ch[]=='A')
{
int x=read();
while(x--)
{
int v=read(),num=read();
insert(i,v,num);
}
}
else M[i]=read(),L[i]=read();
}
for(int x=;x<=n;++x)
if(!deg[x])
{
dp(x);
for(int i=m;i>=;--i)
for(int j=;j<=i;++j)
h[i]=max(h[i],h[j]+f[x][][i-j]);
}
cout<<h[m];
}

BZOJ1017 魔兽地图DotR (树上背包)的更多相关文章

  1. BZOJ1017魔兽地图DotR 樹形DP

    @(BZOJ)[樹形DP, 三維DP] Description DotR (Defense of the Robots) Allstars是一个风靡全球的魔兽地图,他的规则简单与同样流行的地图DotA ...

  2. 【BZOJ-1017】魔兽地图DotR 树形DP + 背包

    1017: [JSOI2008]魔兽地图DotR Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 1566  Solved: 705[Submit][S ...

  3. 【bzoj1017】[JSOI2008]魔兽地图DotR

    1017: [JSOI2008]魔兽地图DotR Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 1658  Solved: 755[Submit][S ...

  4. [BZOJ1017][JSOI2008]魔兽地图DotR 树形dp

    1017: [JSOI2008]魔兽地图DotR Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 2597  Solved: 1010[Submit][ ...

  5. BZOJ [JSOI2008]魔兽地图DotR

    1017: [JSOI2008]魔兽地图DotR Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 1243  Solved: 532[Submit][S ...

  6. [bzoj1017][JSOI2008]魔兽地图 DotR (Tree DP)【有待优化】

    Description DotR (Defense of the Robots) Allstars是一个风靡全球的魔兽地图,他的规则简单与同样流行的地图DotA (Defense of the Anc ...

  7. BZOJ1017: [JSOI2008]魔兽地图DotR【树形DP】【玄学】

    Description DotR (Defense of the Robots) Allstars是一个风靡全球的魔兽地图,他的规则简单与同样流行的地图DotA (Defense of the Anc ...

  8. bzoj 1017: [JSOI2008]魔兽地图DotR【树形dp+背包】

    bzoj上是一个森林啊--? dp还是太弱了 设f[i][j][k]为到点i,合成j个i并且花费k金币能获得的最大力量值,a[i]为数量上限,b[i]为价格,p[i]为装备力量值 其实这个状态设计出来 ...

  9. 1017: [JSOI2008]魔兽地图DotR - BZOJ

    Description DotR (Defense of the Robots) Allstars是一个风靡全球的魔兽地图,他的规则简单与同样流行的地图DotA (Defense of the Anc ...

随机推荐

  1. python学习笔记(十四)之字典

    字典:是python中唯一的映射类型,字典中每一项都是由键-值对组成的项.字典中没有索引,只有键和值.键的类型可以是整型,变量或字符串. 创建和访问字典: >>> dict1 = { ...

  2. 【译】DTD - Entities

    原文:DTD - Entities 实体用于定义XML文档中特殊字符的快捷方式. 实体主要有四种类型: 内置实体(Built-in entities) 字符实体(Character entities) ...

  3. 工作中常用的Git操作--------(一)

    今天主要记录一下平常工作当中使用的git操作: 1.git的安装这里省略: 2.git的操作指令: 在项目开发中,经常是拉去经理已经搭建好的一个项目,也就是给我们一个git地址.比如:http://g ...

  4. 避免无用的渲染绘制(Avoiding Unnecessary Paints)

    本文翻译自html5rock上的文章,文章英文原版地址在最后给出. 文中的Paints我翻译成渲染绘制,我自己是这么理解. 开始 绘制(渲染)一个网站或者一个应用的元素对浏览器来说开销是很大的,它会对 ...

  5. spring-boot-资源处理

    WebMvcConfigurerAdapter 使用 1.实现 HandlerInterceptorAdapter 2.添加拦截器 重写WebMvcConfigurerAdapter中的addInte ...

  6. hdfs的datanode工作原理

    datanode的作用: (1)提供真实文件数据的存储服务. (2)文件块(block):最基本的存储单位.对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序 ...

  7. perl6正则 3: 行开头与结尾与多行开头,多行结尾

    ^ $ 匹配一行的开头或结尾, 可以用 ^ 或 $. > so 'abcde' ~~ /e$/ True > so 'abcdef' ~~ /e$/ False > so 'abcd ...

  8. WebHeaderCollection类

    .net添加http报头 string[] allKeys = WebHeaderCollection.AllKeys; for (int i = 0; i < allKeys.Length; ...

  9. PhantomJS、Selenium、Chrome驱动的mac版安装和配置

    PhantomJS(爬取动态页面需要用到) 基于webkit的javaScript API.提供了css选择器,提供了处理文件的I/O操作,支持Web标准.DOM操作.JSON.HTML5.Canva ...

  10. caffe使用finetume

    训练时, solver.prototxt中使用的是train_val.prototxt ./build/tools/caffe/train -solver ./models/bvlc_referenc ...