大逃杀(树上dp)



这道题和宝藏差不多吧,转移的时候比较麻烦的。
代码中分量很多种情况。
h更新比较麻烦


这两幅图表示了双边更新中3,4连个h更新,下面比较好理解的吧。
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstdio>
#define N 307
using namespace std; const int inf=; int n,m,ans=-inf;
int w[N],t[N];
int f[N][N],g[N][N],h[N][N];
int cnt,head[N],next[N*],rea[N*],val[N*]; void add(int u,int v,int fee)
{
next[++cnt]=head[u],head[u]=cnt;
rea[cnt]=v,val[cnt]=fee;
}
void dfs(int u,int fa)
{
for (int i=;i<=m;i++)
f[u][i]=g[u][i]=h[u][i]=(i>=t[u]?w[u]:-inf);//初始化
for (int i=head[u];i!=-;i=next[i])//这次均摊是O(1)
{
int v=rea[i],fee=val[i];
if (v==fa) continue;
dfs(v,u);
for (int j=m;j>=fee;j--)
for (int k=;k<=j-fee;k++)
{
int nowf=f[u][j],nowg=g[u][j],nowh=h[u][j];
if (j-*fee-k>=)
{
nowf=max(nowf,f[u][j-*fee-k]+f[v][k]);
nowg=max(nowg,g[u][j-*fee-k]+f[v][k]);
nowh=max(nowh,h[u][j-*fee-k]+f[v][k]);//图上注释
nowh=max(nowh,f[u][j-*fee-k]+h[v][k]);//图上注释
}
nowg=max(nowg,f[u][j-k-fee]+g[v][k]);//直接进入这个v结束
nowh=max(nowh,g[u][j-k-fee]+g[v][k]);//直接进入这个v结束
f[u][j]=nowf,g[u][j]=nowg,h[u][j]=nowh;
}
}
// cout<<u<<" "<<h[u][m]<<" "<<f[u][m]<<" "<<g[u][m]<<endl;
ans=max(ans,h[u][m]);
if (fa==-) printf("%d",ans);
}
int main()
{
memset(head,-,sizeof(head));
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) scanf("%d",&w[i]);
for (int i=;i<=n;i++) scanf("%d",&t[i]);
for (int i=,x,y,z;i<n;i++)
{
scanf("%d%d%d",&x,&y,&z);
add(x,y,z),add(y,x,z);
}
dfs(,-);
}
转移O(n^2),遍历O(n),然后就是O(n^3)
大逃杀(树上dp)的更多相关文章
- 绝地求生大逃杀BE启动失败,应用程序无法正常启动
今日更新绝地求生大逃杀后部分客户反馈绝地求生点击启动提示BE安装,应用程序无法启动 问题原因:经过排查发现,客户开启过超级工作站运行过游戏,在系统镜像包中保留了旧版的BE服务,致使新版BE无法安装,冲 ...
- 《绝地求生大逃杀》BE错误怎么办 BE服务未正常运行及安装失败解决方法
<绝地求生大逃杀>BattlEye Launcher是游戏的反作弊程序,也是启动过程中做容易出现错误的,今天小编带来“爆锤吧务”分享的<绝地求生大逃杀>BE服务未正常运行及安装 ...
- 洗礼灵魂,修炼python(41)--巩固篇—从游戏《绝地求生-大逃杀》中回顾面向对象编程
声明:本篇文章仅仅以游戏<绝地求生>作为一个参考话题来介绍面向对象编程,只是作为学术引用,其制作的非常简易的程序也不会作为商业用途,与蓝洞公司无关. <绝地求生>最近很火,笼络 ...
- [JZOJ 5819] 大逃杀
题意:求一个树上背包~~ 先贴代码存一下,好像打挂了. #include <bits/stdc++.h> using namespace std; const int maxn = 400 ...
- [BZOJ3611][Heoi2014]大工程(虚树上DP)
3611: [Heoi2014]大工程 Time Limit: 60 Sec Memory Limit: 512 MBSubmit: 2464 Solved: 1104[Submit][Statu ...
- bzoj 2286 [Sdoi2011]消耗战(虚树+树上DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2286 [题意] 给定一棵树,切断一条树边代价为ci,有m个询问,每次问使得1号点与查询 ...
- codevs 1421 秋静叶&秋穣子(树上DP+博弈)
1421 秋静叶&秋穣子 题目描述 Description 在幻想乡,秋姐妹是掌管秋天的神明,作为红叶之神的姐姐静叶和作为丰收之神的妹妹穰子.如果把红叶和果实联系在一 起,自然会想到烤红薯 ...
- BZOJ_1827_[Usaco2010 Mar]gather 奶牛大集会_树形DP
BZOJ_1827_[Usaco2010 Mar]gather 奶牛大集会_树形DP 题意:Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来 ...
- 洛谷【P2458】[SDOI2006]保安站岗 题解 树上DP
题目描述 五一来临,某地下超市为了便于疏通和指挥密集的人员和车辆,以免造成超市内的混乱和拥挤,准备临时从外单位调用部分保安来维持交通秩序. 已知整个地下超市的所有通道呈一棵树的形状:某些通道之间可以互 ...
随机推荐
- vue使用echarts可视化图形插件
1.安装echarts: cnpm/npm i echarts -S 2.main.js中 import echarts from 'echart' Vue.prototype.$echa ...
- vue计算属性无法监听到数组内部变化
计算属性可以帮助我们简化代码,做到实时更新,不用再自己添加function去修改data. 首先看一下计算属性的基本写法(摘自官网) var vm = new Vue({ el: '#demo', d ...
- Bootstrap 网格系统(Grid System)实例4
Bootstrap 网格系统(Grid System)实例4:中型和大型设备 <!DOCTYPE html><html><head><meta http-eq ...
- Mac OSX用 dd 命令,浇灌ISO镜像到USB驱动器
Mac OSX用 dd 命令,浇灌ISO镜像到USB驱动器 字数244 阅读197 评论0 喜欢0 把ISO镜像转换为一个可启动的USB设备.一种可行的方法是通过OS X的Terminal “浇灌”到 ...
- 17条 Swift 最佳实践规范
本文由CocoaChina译者小袋子(博客)翻译自schwa的github主页原文作者:schwa 这是一篇 Swift 软件开发的最佳实践教程. 前言 这篇文章是我根据在 SwiftGraphics ...
- c++ 将输入存储到数组,然后反转数组,最后输出
// 输入一个包含多个double元素的数组,先打印结果,然后反转出头和尾元素之外的所有元素,最后再打印结果 #include <iostream> using namespace std ...
- 递归函数&二分查找
一.递归函数 1)定义 在函数中调用函数本身,就是递归 在python中递归的深度最大为1000,但实际达不到1000 def func(): print("-----func-----&q ...
- WIN10配置instantclient
在PLSQL Developer目录下建立如下bat文件,替换其快捷方式,启动PLSQL Developer: @echo off set path=C:\instantclient-basic-nt ...
- H.264 Profile-level-id
基于SIP协议的VOIP通信,该字段通常位于视频协商sdp报文中,如: video RTP/AVP rtpmap: H264/ fmtp: profile-level-id=42801E; packe ...
- spring配置datasource三种方式 数据库连接池
尊重原创(原文链接):http://blog.csdn.net/kunkun378263/article/details/8506355 1.使用org.springframework.jdbc.da ...