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. 原生javascript焦点轮播图

    刚刚学会,写了一个轮播图效果,不过bug蛮多,请高手指点一下,谢谢 <!DOCTYPE html> <html> <head> <meta charset=& ...

  2. Linux 命令 - crontab: 任务调度

    cron 是一个 Linux 下的定时执行工具,可以在无需人工干预的情况下运行作业.守护进程 cron 会读取 crontab 文件,根据配置在指定的时间执行任务.contab 命令用来添加.删除.显 ...

  3. Nginx - HTTP Configuration, the Location Block

    Nginx offers you the possibility to fine-tune your configuration down to three levels — at the proto ...

  4. NDIS IM 驱动那些事情

    最近不知道为什么开始学习windows NDIS驱动开发,用的是寒江独钓的例子,其实他的改的代码也就一点点,说的有用的东西也就那么多,不过还是感谢他出了这么一本书,不然这真的就没有一本稍微好一点的书籍 ...

  5. [Bootstrap]全局样式(三)

    表格 1.基本类  .table  {width/margin-bottom/}  {padding/border-top} e.g.:<table class="table" ...

  6. Contest1065 - 第四届“图灵杯”NEUQ-ACM程序设计竞赛(个人赛)C粉丝与汉诺塔

    题目描述 苟利国家生死以,岂因福祸避趋之?作为ACM真正的粉丝,应该都听闻过汉诺塔问题,汉诺塔问题是这样的: 有三根柱子,编号A,B,C柱,初始情况下A柱上有n个盘子,小盘子在上大盘子在下,n个盘子大 ...

  7. STL merge的实现细节

    //std::merge的两个版本 template<class InputIt1, class InputIt2, class OutputIt> //First version Out ...

  8. 使用GruntJS构建Web程序

    Gruntjs是JavaScript项目的构建工具,也是基于node的一个命令行工具.很多开源JS项目都是使用它搭建.如jQuery.Qunit.CanJS等.它有以下作用 合并JS文件 压缩JS文件 ...

  9. Limit参数优化MySQL查询的方法

    在做一些查询时,总希望能避免数据库引擎做全表扫描,因为全表扫描时间长,而且其中大部分扫描对客户端而言是没有意义的.那么,在mysql中有那些方式是可以避免全表扫面?除了通过使用索引列或分区等方式来进行 ...

  10. CentOS6.5 MySQL 配置设置总结笔记

    三.登录MySQL 登录MySQL的命令是mysql, mysql 的使用语法如下:  mysql [-u username] [-h host] [-p[password]] [dbname]  u ...