BZOJ 1017 魔兽地图DotR(树形DP)
题意:有两类装备,高级装备A和基础装备B。现在有m的钱。每种B有一个单价和可以购买的数量上限。每个Ai可以由Ci种其他物品合成,给出Ci种其他物品每种需要的数量。每个装备有一个贡献值。求最大的贡献值。已知物品的合成路线是一个严格的树模型。即有一种物品不会合成其他任意物品,其余物品都会仅仅可用作合成另外一种物品
思路:f[i][j][k],代表第i个物品,花费了j,向上提供k个i物品。
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
int f[][][];
int num[],a[],b[],c[][],d[][];
int n,m,vis[],dp[][],w[],pd[];
void dfs(int x){
if (!num[x]){
b[x]=std::min(b[x],m/a[x]);
for (int i=;i<=b[x];i++)
for (int j=;j<=i;j++)
f[x][i*a[x]][j]=w[x]*(i-j);
return;
}
b[x]=0x7fffffff;
for (int i=;i<=num[x];i++){
int pur=c[x][i];
dfs(pur);
b[x]=std::min(b[x],b[pur]/d[x][i]);
a[x]+=d[x][i]*a[pur];
}
b[x]=std::min(b[x],m/a[x]);
for (int t=;t<=b[x];t++){
memset(dp,-0x3f3f3f3f,sizeof dp);
dp[][]=;
for (int i=;i<=num[x];i++)
for (int j=;j<=m;j++)
for (int k=;k<=j;k++)
dp[i][j]=std::max(dp[i][j],dp[i-][j-k]+f[c[x][i]][k][t*d[x][i]]);
for (int j=;j<=m;j++)
for (int k=;k<=t;k++)
f[x][j][k]=std::max(f[x][j][k],dp[num[x]][j]+(t-k)*w[x]);
}
}
int main(){
char s[];
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++){
scanf("%d",&w[i]);
scanf("%s",s+);
if (s[]=='A') pd[i]=;else pd[i]=;
num[i]=;
if (pd[i]==) {
scanf("%d%d",&a[i],&b[i]);
num[i]=;
continue;
}
scanf("%d",&num[i]);
for (int j=;j<=num[i];j++){
scanf("%d%d",&c[i][j],&d[i][j]);
vis[c[i][j]]=;
}
}
int i;
for (i=;i<=n;i++) if (!vis[i]) break;
int root=i;
memset(f,-0x3f3f3f3f,sizeof f);
dfs(root);
int ans=;
for (int i=;i<=m;i++)
for (int j=;j<=b[root];j++)
ans=std::max(ans,f[root][i][j]);
printf("%d\n",ans);
}
BZOJ 1017 魔兽地图DotR(树形DP)的更多相关文章
- 【BZOJ-1017】魔兽地图DotR 树形DP + 背包
1017: [JSOI2008]魔兽地图DotR Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 1566 Solved: 705[Submit][S ...
- [BZOJ1017][JSOI2008]魔兽地图DotR 树形dp
1017: [JSOI2008]魔兽地图DotR Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 2597 Solved: 1010[Submit][ ...
- [BZOJ]1017 魔兽地图DotR(JSOI2008)
BZOJ第一页做着做着就能碰到毒题,做到BZOJ1082小C就忍了,没想到下一题就是这种东西.这种题目不拖出来枭首示众怎么对得起小C流逝的青春啊. Description DotR (Defense ...
- bzoj 1017 魔兽地图DotR
题目大意: 他们需要购买装备来提升自己的力量值,每件装备都可以使佩戴它的英雄的力量值提高固定的点数,所以英雄的力量值等于它购买的所有装备的力量值之和.装备分为基本装备和高级装备两种.基本装备可以直接从 ...
- BZOJ [JSOI2008]魔兽地图DotR
1017: [JSOI2008]魔兽地图DotR Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 1243 Solved: 532[Submit][S ...
- BZOJ 1017 魔兽地图
Description DotR (Defense of the Robots) Allstars是一个风靡全球的魔兽地图,他的规则简单与同样流行的地图DotA (Defense of the Anc ...
- [bzoj1017][JSOI2008]魔兽地图 DotR (Tree DP)【有待优化】
Description DotR (Defense of the Robots) Allstars是一个风靡全球的魔兽地图,他的规则简单与同样流行的地图DotA (Defense of the Anc ...
- 【bzoj1017】[JSOI2008]魔兽地图DotR
1017: [JSOI2008]魔兽地图DotR Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 1658 Solved: 755[Submit][S ...
- [BZOJ 4033] [HAOI2015] T1 【树形DP】
题目链接:BZOJ - 4033 题目分析 使用树形DP,用 f[i][j] 表示在以 i 为根的子树,有 j 个黑点的最大权值. 这个权值指的是,这个子树内部的点对间距离的贡献,以及 i 和 Fat ...
随机推荐
- C#中使用命名管道进行进程通信的实例
原文:C#中使用命名管道进行进程通信的实例 1 新建解决方案NamedPipeExample 在解决方案下面新建两个项目:Client和Server,两者的输出类型均为"Windows 应用 ...
- Android ExpandableListActivity的简单介绍及小例子
Android中常常要用到ListView,但也经常要用到ExpandableListView,ListView是显示列表,而ExpandableListView显示的是分类的列表: 下面用一个例子来 ...
- bzoj2325 [ZJOI2011]道馆之战
Description 口袋妖怪(又名神奇宝贝或宠物小精灵)红/蓝/绿宝石中的水系道馆需要经过三个冰地才能到达馆主的面前,冰地中的每一个冰块都只能经过一次.当一个冰地上的所有冰块都被经过之后,到下一个 ...
- 基数---SQL Server 2008 Bible
关系类型 主要实体的键 次要实体的键 一对一 主要实体-主键-单个元组 主要实体-主键-单个元组 一对多 主要实体-主键-单个元组 次要实体-外键-多个元组 多对多 多个元组 多个元组
- .NET中 DAL+IDAL+Model+BLL+Web是什么意思
在.NET中 DAL+IDAL+Model+BLL+Web是什么意思 http://hi.baidu.com/hexiaojian/item/8d0c1a8e648546d75e0ec1e7 其实三层 ...
- hdu1695:数论+容斥
题目大意: 求x属于[1,b]和 y属于[1,d]的 gcd(x,y)=k 的方案数 题解: 观察发现 gcd()=k 不好处理,想到将x=x/k,y=y/k 后 gcd(x,y)=1.. 即问题转化 ...
- Matlab画图常用的符号和颜色
线型 说明 标记符 说明 颜色 说明 - 实线(默认) + 加号符 r 红色 -- 双划线 o 空心圆 g 绿色 : 虚线 * 星号 b 蓝色 :. 点划线 . 实心圆 c 青绿色 x 叉号符 m 洋 ...
- java实验7-多线程编程
1 利用Thread和Runnable创建线程 [实验目的] (1)理解用实现Runnable接口的方法实现多线程. (2)掌握线程优先级的设置. (3)加深对线程状态转换的理解. [实验要求] 要求 ...
- Gstreamer 中的playback插件
1. PLAYBACK插件基本介绍 在早期的版本中同时存在playbin和playbin2,但是在最新的版本中,playbin2已经稳定,取代了playbin, playbin不再进行维护.下面是官网 ...
- Dev GridControl,GridView 显示多行文本及合并相同单元格
显示多行文本的方法 首先把gridcontrol的views的Optionsview里的RowAutoHeight设置为True 在In-place Editor Repository 里添加 Mem ...