【BZOJ1017】[JSOI2008]魔兽地图(动态规划)

题面

BZOJ

洛谷

题解

状态设一下,\(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]魔兽地图(动态规划)的更多相关文章

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

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

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

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

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

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

  4. BZOJ1017 [JSOI2008]魔兽地图DotR 【树形dp + 背包dp】

    题目链接 BZOJ1017 题解 orz hzwer 树形dp神题 设\(f[i][j][k]\)表示\(i\)号物品恰好花费\(k\)金币,并将\(j\)个物品贡献给父亲的合成时的最大收益 计算\( ...

  5. BZOJ1017: [JSOI2008]魔兽地图DotR

    传送门 设$f[i][j][k]$表示对于第$i$个点,向父节点贡献$j$个已合成的装备,花费了$k$的代价,最多获得的力量值. 单纯的$f[i][j][k]$是很难转移的,主要原因是无法维护和其他儿 ...

  6. bzoj1017(JSOI2008)魔兽地图

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1017 钱数很少,所以它也能压进状态里. 还有向上贡献几个物品.所以状态就是第 i 号物品,向 ...

  7. bzoj1017 [JSOI2008]魔兽地图DotR——DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1017 好难想的状态啊!f[i][j][k]表示i号物品有j个向上贡献,一共花了k钱的最大力量 ...

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

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

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

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

随机推荐

  1. 20155222卢梓杰 实验一 逆向及Bof基础

    实验一 逆向及Bof基础 1.实验对象为32位可执行文件pwn1,这个程序主要有main.foo.getshell这三个函数,其中foo函数功能为输出输入的字符串,getshell函数功能为打开一个s ...

  2. 通过定义过滤器filter解决跨域问题

            跨域是比较常见问题,比较简单的方式就是直接定义一个过滤器filter,然后在请求头里面加上一些参数.下面来看看具体的写法吧. 一.java代码 package com.hj.usera ...

  3. python 画圆

    import numpy as np import matplotlib.pyplot as plt # ========================================== # 圆的 ...

  4. TFS2012独占签出设置

    说明:TFS2012默认是可以多人签出同一个文件.如果要设为独占签出,请看下面操作步骤 1. 2. 3. 然后选择工作区---编辑---高级.最后如下图,在位置那里选择服务器. END

  5. Java类加载器学习笔记

    今后一段时间会全面读一下<深入理解Java虚拟机> 在这里先记一下在网上看到的几篇介绍 类加载器 的文章,等读到虚拟机类加载机制再详细介绍. 超详细Java中的ClassLoader详解 ...

  6. 【开源.NET】 轻量级内容管理框架Grissom.CMS(第二篇前后端交互数据结构分析)

    这是 CMS 框架系列文章的第二篇,第一篇开源了该框架的代码和简要介绍了框架的目的.作用和思想,这篇主要解析如何把sql 转成标准 xml 配置文件和把前端post的增删改数据规范成方便后台解析的结构 ...

  7. Windows中的键盘快捷方式

    Windows 中的键盘快捷方式 适用于: Windows 10Windows 8.1Windows 7 Windows 10 键盘快捷方式就是按键或按键组合,可提供一种替代方式来执行通常使用鼠标执行 ...

  8. Unity 3D 简易制作摄像机围绕物体随鼠标旋转效果

    Unity 3D 简易制作摄像机围绕物体随鼠标旋转效果 梗概: 一. 摄像机围绕目标物体旋转, 即摄像机离目标物体有一定的距离且旋转轴心为该物体的位置. 二. 当目标物体被障碍物挡住后, 需要将摄像机 ...

  9. 微软职位内部推荐-Software Engineer II-Search

    微软近期Open的职位: Do you want to work on a fast-cycle, high visibility, hardcore search team with ambitio ...

  10. LeetCode 637. Average of Levels in Binary Tree二叉树的层平均值 (C++)

    题目: Given a non-empty binary tree, return the average value of the nodes on each level in the form o ...