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的更多相关文章

  1. bzoj 1065: [NOI2008] 奥运物流

    1065: [NOI2008] 奥运物流 Description 2008北京奥运会即将开幕,举国上下都在为这一盛事做好准备.为了高效率.成功地举办奥运会,对物流系统 进行规划是必不可少的.物流系统由 ...

  2. 【洛谷】P4202 [NOI2008]奥运物流

    [洛谷]P4202 [NOI2008]奥运物流 感觉有点降智 首先设环长为\(len\),很容易推导出 \[ R(1) = \frac{\sum_{i = 1}^{N} C_{i} k^{dep[i] ...

  3. [NOI2008]奥运物流

    题目 洛谷 BZOJ 做法 单环有向图毒瘤题 不考虑环和改变后继:\(\sum\limits{i=1}^n C_i\cdot K^{dep(i)}\) 考虑环无穷等比求极m:\(R(1)=\sum\l ...

  4. 【BZOJ1065】【NOI2008】奥运物流(动态规划)

    [BZOJ1065][NOI2008]奥运物流(动态规划) 题面 BZOJ 洛谷 题解 先不考虑环的情况,于是变成了一棵树. 这样子我们答案的贡献是\(\sum_{i=1}^nC_i\times k^ ...

  5. 题解 Sue的小球/名次排序问题/方块消除/奥运物流

    Sue的小球 名次排序问题 方块消除 奥运物流 Sue的小球 题目大意 有 \(n\) 个小球在下落,初始位置 \((x_i,y_i)\),下落速度为 \(v_i\).你初始位置在 \(x_0\),速 ...

  6. 【BZOJ 1065】【Vijos 1826】【NOI 2008】奥运物流

    http://www.lydsy.com/JudgeOnline/problem.php?id=1065 https://vijos.org/p/1826 好难的题啊TWT ∈我这辈子也想不出来系列~ ...

  7. BZOJ 1065 奥运物流

    http://www.lydsy.com/JudgeOnline/problem.php?id=1065 思路:由于n个点,有n条边,因此由根就会引出一个环,我们枚举环的长度,在那个长度断开,我们假设 ...

  8. bzoj1065【Noi2008】奥运物流

    题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1065 给一棵基环树,每个点i的权值=ci+k*∑son[i],修改至多m个点的父亲使1号点权值 ...

  9. 1061: [Noi2008]志愿者招募 - BZOJ

    Description 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完 ...

随机推荐

  1. DB2查看表空间大小及使用情况

    1.SQL 查询(选择Schema为SYSPROC) SELECT SUBSTR(TABLESPACE_NAME,,) AS TBSPC_NAME, AS "TOTAL(MB)", ...

  2. PHP学习笔记 - 进阶篇(4)

    PHP学习笔记 - 进阶篇(4) 字符串操作 字符串介绍 PHP开发中,我们遇到最多的可能就是字符串. 字符串变量用于包含字符串的值. 一个字符串 通过下面的3种方法来定义: 1.单引号 2.双引号 ...

  3. iOS预处理指令

    预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器.可见预处理过程先于编译器对源代码进行处理. 预处理指令是以#开头的代码行,#后是指令关键字,在关键字和#号之间允许存在任意个数的空 ...

  4. Apache 使用密码文件验证用户

    使用文本文件作为密码文件 创建密码文件 需要使用htpasswd.exe文件来创建用户密码文件 语法: htpasswd -c '文件完整路径' 用户名 向一个用户密码文件中添加一个新用户 语法: h ...

  5. JavaScript的语法规则

    JavaScript的语法规则 JavaScript区分大小写 JavaScript脚本程序须嵌入在HTML文件中 JavaScript脚本程序中不能包含HTML标记代码 每行写一条脚本语句 语句末尾 ...

  6. 在java中HttpServletResponse响应中文出现乱码。

    以字符串的形式输出. 1.response.getWriter().write("您好中国hello"); 如果这样输出的话.则浏览器结果为: 2.加上代码 response.se ...

  7. StringBuilder和StringBuffer

    StringBuilder java.lang 类 StringBuilder java.lang.Object java.lang.StringBuilder 所有已实现的接口: Serializa ...

  8. 编程语言中的Namespace

    Namespace 1.C struct 2.C++(Pronounced 'see jia-jia' or 'see plus-plus') namespace 3.Python module(s) ...

  9. Libcurl笔记三

    一,post请求和回报处理 //"host/path?extra" //strHttp=" http://portal.liuhan.com:/web/getConfig ...

  10. Libcurl笔记二

    一: multi与easy接口的不同处The multi interface offers several abilities that the easy interface doesn't. The ...