1065: [NOI2008]奥运物流 - BZOJ



Sample Input
4 1 0.5
2 3 1 3
10.0 10.0 10.0 10.0
Sample Output
30.00

推荐题解:http://blog.csdn.net/whjpji/article/details/7593329
这个题解比较详细,代码上还有注释,比较容易懂
里面有题目讲解
首先我们先算出R(1)的公式,就是(d为深度,根的深度为0,len为环的长度)

这个怎么算呢
首先如果这个是树的话,我们就知道
R(1)等于这个式子的上面那一部分,但是1还有后继,所以有一个环
我们把1拆成两个点,一个做根,一个做叶子
于是R(1)=
n
sssssssssss
i
g ci*k^di + R(1)*k^len
m
aaaaaaaaaaa
i=2
然后我们可以证明如果修改后继,一定是修改为1(因为修改为1,可以最大限度的减小深度和环的长度,这个比较一下就行了)
然后是树形dp,因为有环所以我们先去环,就是枚举环的长度,把那个断点的后继设为1,这样就把分母固定了,我们要做的就是让分子越大越好
dp[i][j][d]表示以i为根的子树,修改j次,i与根的距离为d的最大贡献

上面就是i不修改后继的,下面就是i修改后继的
然后用01背包解决转移(注意,修改的话,c>0才行)
const
maxn=;
var
f,g:array[..maxn,..maxn,..maxn]of double;
c,ff,kk:array[..maxn]of double;
pre:array[..maxn]of longint;
ans:double;
n,m:longint; procedure init;
var
i:longint;
begin
read(n,m,kk[]);
for i:= to n do
kk[i]:=kk[i-]*kk[];
for i:= to n do
read(pre[i]);
for i:= to n do
read(c[i]);
end; function min(x,y:double):double;
begin
if x<y then exit(x);
exit(y);
end; function max(x,y:double):double;
begin
if x>y then exit(x);
exit(y);
end; function min(x,y:longint):longint;
begin
if x<y then exit(x);
exit(y);
end; procedure dp(u,d:longint);
var
i,j,k,dd:longint;
begin
for i:= to n do
if pre[i]=u then dp(i,d+);
for dd:=min(,d) to d do
begin
fillchar(ff,sizeof(ff),);
for i:= to n do
if pre[i]=u then
for j:=m downto do
for k:=j downto do
ff[j]:=max(ff[j],ff[k]+g[i,j-k,dd]);
for j:= to m do
f[u,j,dd]:=ff[j]+c[u]*kk[dd];
end;
if d> then
begin
fillchar(ff,sizeof(ff),);
for i:= to n do
if pre[i]=u then
for j:=m downto do
for k:=j downto do
ff[j]:=max(ff[j],ff[k]+g[i,j-k,]);
for j:= to m do
f[u,j,]:=ff[j-]+c[u]*kk[];
end;
for j:= to m do
for dd:= to d- do
g[u,j,dd]:=max(f[u,j,dd+],f[u,j,]);
end; procedure work;
var
i,j,k,l,len,tmp:longint;
now:double;
begin
i:=pre[];
len:=;
while i<> do
begin
fillchar(f,sizeof(f),);
fillchar(g,sizeof(g),);
tmp:=pre[i];
pre[i]:=;
now:=;
for j:= to n do
if pre[j]= then dp(j,);
fillchar(ff,sizeof(ff),);
for j:= to n do
if pre[j]= then
for k:=m downto do
for l:=k downto do
ff[k]:=max(ff[k],ff[l]+f[j,k-l,]);
for j:= to m- do
now:=max(now,ff[j]);
if tmp= then now:=max(now,ff[m]);
ans:=max(ans,(now+c[])/(-kk[len]));
pre[i]:=tmp;
i:=pre[i];
inc(len);
end;
writeln(ans::);
end; begin
init;
work;
end.
1065: [NOI2008]奥运物流 - BZOJ的更多相关文章
- bzoj 1065: [NOI2008] 奥运物流
1065: [NOI2008] 奥运物流 Description 2008北京奥运会即将开幕,举国上下都在为这一盛事做好准备.为了高效率.成功地举办奥运会,对物流系统 进行规划是必不可少的.物流系统由 ...
- 【洛谷】P4202 [NOI2008]奥运物流
[洛谷]P4202 [NOI2008]奥运物流 感觉有点降智 首先设环长为\(len\),很容易推导出 \[ R(1) = \frac{\sum_{i = 1}^{N} C_{i} k^{dep[i] ...
- [NOI2008]奥运物流
题目 洛谷 BZOJ 做法 单环有向图毒瘤题 不考虑环和改变后继:\(\sum\limits{i=1}^n C_i\cdot K^{dep(i)}\) 考虑环无穷等比求极m:\(R(1)=\sum\l ...
- 【BZOJ1065】【NOI2008】奥运物流(动态规划)
[BZOJ1065][NOI2008]奥运物流(动态规划) 题面 BZOJ 洛谷 题解 先不考虑环的情况,于是变成了一棵树. 这样子我们答案的贡献是\(\sum_{i=1}^nC_i\times k^ ...
- 题解 Sue的小球/名次排序问题/方块消除/奥运物流
Sue的小球 名次排序问题 方块消除 奥运物流 Sue的小球 题目大意 有 \(n\) 个小球在下落,初始位置 \((x_i,y_i)\),下落速度为 \(v_i\).你初始位置在 \(x_0\),速 ...
- 【BZOJ 1065】【Vijos 1826】【NOI 2008】奥运物流
http://www.lydsy.com/JudgeOnline/problem.php?id=1065 https://vijos.org/p/1826 好难的题啊TWT ∈我这辈子也想不出来系列~ ...
- BZOJ 1065 奥运物流
http://www.lydsy.com/JudgeOnline/problem.php?id=1065 思路:由于n个点,有n条边,因此由根就会引出一个环,我们枚举环的长度,在那个长度断开,我们假设 ...
- bzoj1065【Noi2008】奥运物流
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1065 给一棵基环树,每个点i的权值=ci+k*∑son[i],修改至多m个点的父亲使1号点权值 ...
- 1061: [Noi2008]志愿者招募 - BZOJ
Description 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完 ...
随机推荐
- 新增html元素的使用
今天学习HTML5中新增元素的使用 (Ⅰ)新增主体结构元素 Section元素:用于对网站或应用程序中的内容进行分块. <section> <h1></h1> &l ...
- JMS - Message
一条 JMS 消息包含三个部分:消息头.消息属性和消息体. 消息头 消息头提供了和消息有关的元数据,它描述了消息有谁创建.何时创建.数据的有效长度等信息.消息头还包含了描述消息目的地(主题或队列)的路 ...
- Git CMD - add: Record changes to the repository
命令格式 git commit [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend] [--dry-run] [(-c ...
- Delphi 获取进程路径及命令行参数
Delphi 获取进程路径及命令行参数, 但有的进程获取时会报错,不知为啥 type PVOID64 = UINT64; _UNICODE_STRING = packed record Length ...
- Word 2003 出现 向程序发送命令时出现问题 的 解决方案
这种原因出现的问题是word的模板出现问题. 解决方案是重新让word生成Norma.dot文档. 步骤: 1,按住视窗键+R或者开始菜单搜索文件和程序,粘贴 %appdata%\microsoft\ ...
- AngularJS开发相关配置
安装步骤: 1. Node.js,下载地址:https://nodejs.org/en/ 2. Git 下载地址:https://git-scm.com/download/ 3. Python (需为 ...
- <%@include和<jsp:include
博客地址:http://www.cnblogs.com/shizhongtao/p/3506742.html欢迎交流 <%@ include %>是编译时包含,<jsp:includ ...
- uva673 - Parentheses Balance(栈)
题意:1.空串合法.2.若A和B合法,则AB合法.3.若A合法,则(A)和[A]合法. 思路:遍历串,遇到(或[,则压入队列,若遇到),判断:若栈空,则不合法:若栈顶元素不是(,也不合法.]同理.因为 ...
- RadioStream应用源码完整版(iphone版和ipad版)
RadioStream应用源码完整版(iphone版和ipad版),这个项目是从那个ios教程网分析过了的,也是一个不错的国外音乐应用的,支持iphone版和ipad版. <ignore_js_ ...
- vm NAT方式linux上不了网 解决方法
环境: vm版本:vm 11.0.0 系统:本机win7 虚拟机:centos 5.5 问题,当vm设置虚拟机上网方式为NAT方式时,两台虚拟centos能互相ping通.主机能拼通虚拟机,但虚拟 ...