bzoj上是一个森林啊……?

dp还是太弱了

设f[i][j][k]为到点i,合成j个i并且花费k金币能获得的最大力量值,a[i]为数量上限,b[i]为价格,p[i]为装备力量值

其实这个状态设计出来就好做了,树上背包随便转移一下就行了

因为是森林,所以最后统计答案的时候也要再做一遍背包

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=55;
int n,m,h[N],cnt,ans,p[N],a[N],b[N],f[N][105][2005],g[N][2005],d[N],t[N][2005],tot;
char s[5];
struct qwe
{
int ne,to,va;
}e[20005];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void add(int u,int v,int w)
{
cnt++;
e[cnt].to=v;
e[cnt].ne=h[u];
e[cnt].va=w;
d[v]++;
h[u]=cnt;
}
void dp(int u)
{
if(!h[u])
{
a[u]=min(a[u],m/b[u]);
for(int i=0;i<=a[u];i++)
for(int j=i;j<=a[u];j++)
f[u][i][j*b[u]]=(j-i)*p[u];
return;
}
a[u]=1e9;
for(int i=h[u];i;i=e[i].ne)
{
dp(e[i].to);
a[u]=min(a[u],a[e[i].to]/e[i].va);
b[u]+=e[i].va*b[e[i].to];
}
a[u]=min(a[u],m/b[u]);
memset(g,-0x3f,sizeof(g));
g[0][0]=0;
for(int l=a[u];l>=0;l--)
{
int tot=0;
for(int i=h[u];i;i=e[i].ne)
{
tot++;
for(int j=0;j<=m;j++)
for(int k=0;k<=j;k++)
g[tot][j]=max(g[tot][j],g[tot-1][j-k]+f[e[i].to][l*e[i].va][k]);
}
for(int j=0;j<=l;j++)
for(int k=0;k<=m;k++)
f[u][j][k]=max(f[u][j][k],g[tot][k]+p[u]*(l-j));
}
}
int main()
{
n=read(),m=read();
for(int i=1;i<=n;i++)
{
p[i]=read();
scanf("%s",s);
if(s[0]=='A')
{
int x=read();
while(x--)
{
int y=read(),z=read();
add(i,y,z);
}
}
else
b[i]=read(),a[i]=read();
}
memset(f,-0x3f,sizeof(f));
for(int x=1;x<=n;x++)
if(!d[x])
{
dp(x);
tot++;
for(int i=0;i<=m;i++)
for(int j=0;j<=i;j++)
for(int k=0;k<=a[x];k++)
t[tot][i]=max(t[tot][i],t[tot-1][j]+f[x][k][i-j]);
}
for(int i=0;i<=m;i++)
ans=max(ans,t[tot][i]);
printf("%d\n",ans);
return 0;
}

bzoj 1017: [JSOI2008]魔兽地图DotR【树形dp+背包】的更多相关文章

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

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

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

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

  3. bzoj 1017 : [JSOI2008]魔兽地图DotR

    比较难想的的一道树形dp. 看到这道题正常的思路应该是$f[i][j][k]$表示i这棵子树里买了j个i物品花费为k的最大收益. 但如果直接这么定义的话转移复杂度会很高,需要枚举j,枚举孩子,枚举k, ...

  4. BZOJ.1017.[JSOI2008]魔兽地图(树形DP 背包DP)

    题目链接 树形DP,考虑子节点对父节点的贡献. 设f[x][i][j]表示当前为x,用i个x去合成上一层装备,花费为j的最大价值. 由子节点转移时 是一个分组背包,需要一个辅助数组g[i][j]表示前 ...

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

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

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

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

  7. BZOJ [JSOI2008]魔兽地图DotR

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

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

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

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

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

随机推荐

  1. [Bzoj3131][Sdoi2013]淘金(数位dp)(优先队列)

    3131: [Sdoi2013]淘金 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 847  Solved: 423[Submit][Status][ ...

  2. css三大布局

    标准流: 从左到右,从上到下块级元素独占一行,行内元素碰到父盒子边缘换行 浮动: 特点 1 元素浮动之后不占据原来的位置(脱标),变成立体,下面可以有东西,只影响下面的 2 浮动的盒子在一行上显示 3 ...

  3. linux otl oracle数据库连接例子

    #include <string> #include <iostream> using namespace std; #define OTL_ORA10G   //我连的是LI ...

  4. Spring MVC的WebMvcConfigurerAdapter用法收集(零配置,无XML配置)

    原理先不了解,只记录常用方法 用法: @EnableWebMvc 开启MVC配置,相当于 <?xml version="1.0" encoding="UTF-8&q ...

  5. [Javascript] Link to Other Objects through the JavaScript Prototype Chain

    Objects have the ability to use data and methods that other objects contain, as long as it lives on ...

  6. Pacemaker 安装与使用

    Pacemaker 仅仅做资源管理器(CRM).底下的消息系统採用 corosync. 安装 以 ubuntu 为例, sudo aptitude install -y pacemaker coros ...

  7. mac 使用命令行,对远程服务器进行文件更新

    目的:更新服务器文件A 1.远程传输文件 A.zip 在本地A文件的父级文件夹下执行 scp ./A.zip 远程服务器用户名@远程服务器IP:/要放置的文件夹目录/ 然后要输入服务器登陆密码,进行文 ...

  8. 开发指南专题二:JEECG微云高速开发平台JEECG框架初探

    开发指南专题二:JEECG微云高速开发平台JEECG框架初探 2.JEECG框架初探 2.1演示系统 打开浏览器输入JEECG演示环境界址:http://demo.jeecg.org:8090/能够看 ...

  9. FMDB中常用SQL使用

    大家工作中,最常用到的无非是 增.删.查.改... 在SQL中对应的语句为:INSERT DELETE SELECT UPDATE 首先,你可以使用一款叫做“sqlite database brows ...

  10. PyTorch 60 分钟入门教程:数据并行处理

    可选择:数据并行处理(文末有完整代码下载) 作者:Sung Kim 和 Jenny Kang 在这个教程中,我们将学习如何用 DataParallel 来使用多 GPU. 通过 PyTorch 使用多 ...