【BZOJ1017】[JSOI2008]魔兽地图(动态规划)
【BZOJ1017】[JSOI2008]魔兽地图(动态规划)
题面
题解
状态设一下,\(f[i][j][k]\)表示第\(i\)个物品,有\(j\)个用于合成,总花费为\(k\)的最大力量,转移什么的,乱死了,复杂度感觉好假。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
#define ll long long
#define MAX 110
inline int read()
{
	int x=0;bool t=false;char ch=getchar();
	while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
	if(ch=='-')t=true,ch=getchar();
	while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
	return t?-x:x;
}
char ch[5];
int f[55][MAX][2010],g[2010];
int n,m,a[MAX],cost[MAX],lim[MAX];
struct Line{int v,next,w;}e[MAX];
int h[MAX],cnt=1,dg[MAX],ans[2010];
inline void Add(int u,int v,int w){e[cnt]=(Line){v,h[u],w};h[u]=cnt++;dg[v]++;}
void dfs(int u)
{
	if(!h[u])
	{
		lim[u]=min(lim[u],m/cost[u]);
		for(int i=0;i<=lim[u];++i)
			for(int j=0;j<=i;++j)
				f[u][j][i*cost[u]]=(i-j)*a[u];
		return;
	}
	for(int i=h[u];i;i=e[i].next)
	{
		dfs(e[i].v);
		cost[u]+=cost[e[i].v]*e[i].w;
		lim[u]=min(lim[u],lim[e[i].v]/e[i].w);
	}
	lim[u]=min(lim[u],m/cost[u]);
	for(int i=0;i<=lim[u];++i)
	{
		memset(g,-63,sizeof(g));g[0]=0;
		for(int j=h[u];j;j=e[j].next)
		{
			int v=e[j].v,w=e[j].w;
			for(int k=m;~k;--k)
			{
				int t=-1e9;
				for(int l=0;l<=k;++l)t=max(t,g[l]+f[v][i*w][k-l]);
				g[k]=t;
			}
		}
		for(int j=0;j<=i;++j)
			for(int k=0;k<=m;++k)
				f[u][j][k]=max(f[u][j][k],g[k]+a[u]*(i-j));
	}
}
int main()
{
	n=read();m=read();
	for(int i=1;i<=n;++i)
	{
		a[i]=read();scanf("%s",ch);
		if(ch[0]=='B')cost[i]=read(),lim[i]=read();
		else
		{
			int C=read();lim[i]=1e9;
			while(C--){int x=read(),w=read();Add(i,x,w);}
		}
	}
	memset(f,-63,sizeof(f));
	for(int i=1;i<=n;++i)
		if(!dg[i])
		{
			dfs(i);
			for(int j=m;~j;--j)
				for(int k=0;k<=j;++k)
					ans[j]=max(ans[j],ans[j-k]+f[i][0][k]);
		}
	printf("%d\n",ans[m]);return 0;
}
【BZOJ1017】[JSOI2008]魔兽地图(动态规划)的更多相关文章
- [BZOJ1017][JSOI2008]魔兽地图DotR 树形dp
		1017: [JSOI2008]魔兽地图DotR Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 2597 Solved: 1010[Submit][ ... 
- [bzoj1017][JSOI2008]魔兽地图 DotR (Tree DP)【有待优化】
		Description DotR (Defense of the Robots) Allstars是一个风靡全球的魔兽地图,他的规则简单与同样流行的地图DotA (Defense of the Anc ... 
- BZOJ1017: [JSOI2008]魔兽地图DotR【树形DP】【玄学】
		Description DotR (Defense of the Robots) Allstars是一个风靡全球的魔兽地图,他的规则简单与同样流行的地图DotA (Defense of the Anc ... 
- BZOJ1017 [JSOI2008]魔兽地图DotR  【树形dp + 背包dp】
		题目链接 BZOJ1017 题解 orz hzwer 树形dp神题 设\(f[i][j][k]\)表示\(i\)号物品恰好花费\(k\)金币,并将\(j\)个物品贡献给父亲的合成时的最大收益 计算\( ... 
- BZOJ1017: [JSOI2008]魔兽地图DotR
		传送门 设$f[i][j][k]$表示对于第$i$个点,向父节点贡献$j$个已合成的装备,花费了$k$的代价,最多获得的力量值. 单纯的$f[i][j][k]$是很难转移的,主要原因是无法维护和其他儿 ... 
- bzoj1017(JSOI2008)魔兽地图
		题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1017 钱数很少,所以它也能压进状态里. 还有向上贡献几个物品.所以状态就是第 i 号物品,向 ... 
- bzoj1017 [JSOI2008]魔兽地图DotR——DP
		题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1017 好难想的状态啊!f[i][j][k]表示i号物品有j个向上贡献,一共花了k钱的最大力量 ... 
- 【bzoj1017】[JSOI2008]魔兽地图DotR
		1017: [JSOI2008]魔兽地图DotR Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 1658 Solved: 755[Submit][S ... 
- 【BZOJ-1017】魔兽地图DotR        树形DP + 背包
		1017: [JSOI2008]魔兽地图DotR Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 1566 Solved: 705[Submit][S ... 
随机推荐
- 删除方法odoo
			##判断删除情况,不允许删除def unlink(self,cr,uid,ids,context=None): raise osv.except_osv(u'警告!',u'单据不允许删除' ... 
- 小R的烦恼 BZOJ3280
			分析: 一开始一直Wa,发现是建图建错了,必须得拆点. S连i,流量为a[i],费用为0,i+n连T,流量同上,费用为0,之后i连i+1费用为0,流量为inf,之后S连n*2+i,流量为li,费用为0 ... 
- 【WPF】如何使用wpf实现屏幕最前端的绘图?
			原文:[WPF]如何使用wpf实现屏幕最前端的绘图? 引言 在知乎上面看到如何使用wpf实现屏幕最前端的绘图? 这么一个问题,觉得全屏弹幕很有趣,所以把它实现了. 实现 界面设置很简单,Window界 ... 
- python3 简单进度条代码
			进度条代码函数实现 import sys, time class ShowProcess(object): """ 显示处理进度的类 调用该类相关函数即可实现处理进度的显 ... 
- Windows 10无法使用debug的解决方案
			在学习汇编语言的时候,XP系统或者更早版本的默认在Dos命令下敲入debug即可进入汇编指令模式下,而在Windows 7及更高版本下,这些功能似乎都被阉割了,所以今天我们讲带大家处理一下如何解决这个 ... 
- numpy 初识(三)
			基本运算 exp: e sqrt:开放 floor:向下取整 ravel:矩阵拉成一个向 T:转置(行和列变换) 改变形状: resize: 更改其形状(返回值为None)a.resize(6,2) ... 
- MOSFET的小信号模型和频率响应
			这部分内容大部分参考W.Y.Choi的课堂讲义第三讲和第四讲:http://tera.yonsei.ac.kr/class/2007_1/main.htm 一.小信号模型 首先要明确一点,大部分情形M ... 
- hyperledger-fabirc1.2-ca-server的生产示例
			hyperledger-fabirc1.2-ca-server的生产示例,带TLS 在fabirc-samples/first-network中启动网络,其ca证书是利用crypto的工具生成的,但是 ... 
- 全局最小割StoerWagner算法详解
			前言 StoerWagner算法是一个找出无向图全局最小割的算法,本文需要读者有一定的图论基础. 本文大部分内容与词汇来自参考文献(英文,需***),用兴趣的可以去读一下文献. 概念 无向图的割:有无 ... 
- 第二阶段冲刺——six
			个人任务: 季方:优化统计团队博客的方法. 马佳慧:选择功能界面的logo.背景与功能选择框的整体设计组合. 司宇航:合并程序(添加打印txt). 王金萱:搭建网络服务器,上传数据库及程序. 站立会议 ... 
