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. Ionic条码扫描

    http://m.blog.csdn.net/article/details?id=45843819

  2. CSS实现标题超出宽度省略号来表示

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  3. 【程序员的SQL金典】笔记(第1章~第5章)

      第一章数据库入门 1.概念: 数据库 表 列 记录(行) 主键 索引         第二章 数据表的创建和管理 1.数据库系统中的数据类型大致可以分为五类:整数.数值.字符相关.日期时间以及二进 ...

  4. Android 分析工具 APKAnalyser

    APKAnalyser 是 Android 静态,虚拟分析工具,用来测试和验证 Android 应用的开发工作.ApkAnalyser 是个完整的工具链,可以修改二进制应用.用户可以改装,安装,运行, ...

  5. sqlserver 测试sql语句执行时间

    查看sql语句执行时间/测试sql语句性能 写程序的人,往往需要分析所写的SQL语句是否已经优化过了,服务器的响应时间有多快,这个时候就需要用到SQL的STATISTICS状态值来查看了. 通过设置S ...

  6. iOS 拷贝、剪切和粘贴理论基础(转)

    简介 在iPhone OS 3.0之后,用户可以在一个应用程序上拷贝文本.图像.或其它数据,然后粘贴到当前或其它应用程序的不同位置上.比如,您可以从某个电子邮件中拷贝一个地址,然后粘贴到Contact ...

  7. c# using 引用和别名的使用

    1.使用别名 在同时引用的两个命名空间中有相同的类型时,可以使用别名来区分.如下所示: using System; using System.Threading; using System.Timer ...

  8. Java-IO 输入输出流详解

    一.文件的编码               开发时一定要注意项目默认的编码!!!!!!!!               文件操作的时候一定要记得关闭!!!!!!!!        ASCII:美国标准 ...

  9. Linux 进行反编译 或者 汇编

    Linux 进行反编译 或者 汇编 一.需要的工具 1.objdump 2. 3.

  10. NOIP2011(提高组)DAY2---观光公交(vijosP1741)

    描述 风景迷人的小城Y市,拥有n个美丽的景点.由于慕名而来的游客越来越多,Y市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第0分钟出现在1号景点,随后依次前往2.3.4……n号景 ...