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. EWM Matrai B2B管理平台

    该应用是一款企业管理的app,可以通过“分享”.“工作分派”.“审批”.“业务”.“工作计划”.“日程”等功能得到有效的管控.该项目主要分为5大模块,分别是近期动态,任务,日程,我,在线聊天.   

  2. 转:传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确 .

    近期在做淘宝客的项目,大家都知道,淘宝的商品详细描述字符长度很大,所以就导致了今天出现了一个问题 VS的报错是这样子的  ” 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确“ 还说某 ...

  3. Git CMD - checkout: Switch branches or restore working tree files

    命令格式 git checkout [-q] [-f] [-m] [<branch>] git checkout [-q] [-f] [-m] --detach [<branch&g ...

  4. asp.net post方法;对象转json

    [System.Web.Services.WebMethod()]     public static string GetPoints(string userId)     {         st ...

  5. 【转】Github入门教程

    原文 http://www.eoeandroid.com/thread-274556-1-1.html [初识Github] 首先让我们大家一起喊一句“Hello Github”.YEAH!就是这样. ...

  6. 【转】Log4.NET mark

    C#通过log4net进行异常记录 C#中异常的记录也有一个模板,就是log4net.多的就不说了直接看怎么用的吧. 1.引用log4net.dll. 2.实现log4net的方法. public c ...

  7. Oracle中存储过程传入表名学习

    Oracle中存储过程传入表名: 一.动态清除该表的数据 create or replace procedure p_deletetable(i_tableName in varchar2)  as  ...

  8. Cocos2d-x实例:设置背景音乐与音效-HelloWorld场景实现

    HelloWorld场景就是游戏中的主菜单场景.HelloWorld.h文件代码如下: #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h& ...

  9. OC11_自动释放池

    // // Dog.h // OC11_自动释放池 // // Created by zhangxueming on 15/6/18. // Copyright (c) 2015年 zhangxuem ...

  10. css3学习笔记之2D转换

    translate() 方法 translate()方法,根据左(X轴)和顶部(Y轴)位置给定的参数,从当前元素位置移动. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...