BZOJ 1065 奥运物流
http://www.lydsy.com/JudgeOnline/problem.php?id=1065
思路:由于n个点,有n条边,因此由根就会引出一个环,我们枚举环的长度,在那个长度断开,我们假设len为环的长度。
由于R(i)满足

而产生环时,R[1]=Σci*k^di + R[1]*(k^len),得到
R[1]=(Σci*k^di)/(1-k^len)
因此我们枚举len,然后做树形DP,f[i][j][k]代表第i个点,修改了j次,当前深度为k
那么最后的贡献是Σf[i][j][1],i为1的直接儿子,用一个01背包统计,最后答案就是(ans+c[1])/(1-k^len)
有个蛋疼的地方就是做01背包的时候。。要注意循环变量的顺序,不要重复统计。。
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
int n,m,pre[];
double K[],c[],f[][][],g[][][],F[];
int read(){
int t=,f=;char ch=getchar();
while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
return t*f;
}
void dp(int x,int dep){
for (int i=;i<=n;i++) if (pre[i]==x) dp(i,dep+);
for (int d=std::min(,dep);d<=dep;d++){
for (int j=;j<=m;j++) F[j]=;
for (int i=;i<=n;i++)
if (pre[i]==x)
for (int j=m;j>=;j--)
for (int k=j;k>=;k--)
F[j]=std::max(F[j],F[k]+g[i][j-k][d]);
for (int i=;i<=m;i++)
f[x][i][d]=F[i]+c[x]*K[d];
}
if (dep>){
for (int i=;i<=m;i++) F[i]=;
for (int i=;i<=n;i++)
if (pre[i]==x)
for (int j=m;j>=;j--)
for (int k=j;k>=;k--)
F[j]=std::max(F[j],F[k]+g[i][j-k][]);
for (int i=;i<=m;i++)
f[x][i][]=F[i-]+c[x]*K[];
}
for (int j=;j<=m;j++)
for (int d=;d<dep;d++)
g[x][j][d]=std::max(f[x][j][d+],f[x][j][]);
}
int main(){
n=read();m=read();scanf("%lf",&K[]);
for (int i=;i<=n;i++) K[i]=K[i-]*K[];
for (int i=;i<=n;i++) pre[i]=read();
for (int i=;i<=n;i++) scanf("%lf",&c[i]);
double ans=;
for (int I=pre[],len=;I-;I=pre[I],len++){
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
for (int k=;k<=n;k++)
f[i][j][k]=g[i][j][k]=;
int tmp=pre[I];pre[I]=;
for (int i=;i<=n;i++) if (pre[i]==) dp(i,);
for (int i=;i<=m;i++) F[i]=;
for (int i=;i<=n;i++)
if (pre[i]==)
for (int j=m;j>=;j--)
for (int k=j;k>=;k--)
F[j]=std::max(F[j],F[k]+f[i][j-k][]);
double now=;
for (int i=;i<m;i++) now=std::max(now,F[i]);
if (tmp==) now=std::max(now,F[m]);
pre[I]=tmp;
ans=std::max(ans,(now+c[])/(-K[len]));
}
printf("%.2lf\n",ans);
}
BZOJ 1065 奥运物流的更多相关文章
- bzoj 1065: [NOI2008] 奥运物流
1065: [NOI2008] 奥运物流 Description 2008北京奥运会即将开幕,举国上下都在为这一盛事做好准备.为了高效率.成功地举办奥运会,对物流系统 进行规划是必不可少的.物流系统由 ...
- 【BZOJ1065】【NOI2008】奥运物流(动态规划)
[BZOJ1065][NOI2008]奥运物流(动态规划) 题面 BZOJ 洛谷 题解 先不考虑环的情况,于是变成了一棵树. 这样子我们答案的贡献是\(\sum_{i=1}^nC_i\times k^ ...
- 【洛谷】P4202 [NOI2008]奥运物流
[洛谷]P4202 [NOI2008]奥运物流 感觉有点降智 首先设环长为\(len\),很容易推导出 \[ R(1) = \frac{\sum_{i = 1}^{N} C_{i} k^{dep[i] ...
- 题解 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 ∈我这辈子也想不出来系列~ ...
- 1065: [NOI2008]奥运物流 - BZOJ
Sample Input4 1 0.52 3 1 310.0 10.0 10.0 10.0Sample Output30.00 推荐题解:http://blog.csdn.net/whjpji/art ...
- BZOJ 1003: [ZJOI2006]物流运输trans DP+最短路
Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格 ...
- BZOJ 1003 [ZJOI2006]物流运输trans
1003: [ZJOI2006]物流运输trans Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4242 Solved: 1765[Submit] ...
- BZOJ 1003: [ZJOI2006]物流运输trans(最短路+dp)
1A,爽! cost[i][j]表示从第i天到第j天不改路线所需的最小花费,这个可以用最短路预处理出.然后dp(i)=cost[j][i]+dp(j-1)+c. c为该路线的花费. --------- ...
随机推荐
- 安装wampserver2时出现的问题
提示丢失MSVCR100.dll 如果安装其他软件也是同样的提示情况,估计也是这个原因,以下分别是32位与64位的VC10下载地址: VC10 SP1 vcredist_x86.exe 32 bits ...
- UIAutomator 学习版
1.要写UIAutomator的testcase,首先要用Eclipse创建一个Java Project 需要将Junit 的lib加入到工程里 2.添加android.jar和uiautomator ...
- device tree website
每一个设备都有相对应的初始化程序,dts的写法可以参照Documentations/devicetree/下面的文档 http://bbs.chinaunix.net/thread-4139331-1 ...
- 通过java类文件识别JDK编译版本
类文件中第5,6,7,8四个字节是jDK版本号信息,其中5,6为小版本号:7,8为大版本号. 大版本号对应JDK版本如下: JDK版本号 7,8字节 JDK8 52(0x34) JDK7 51(0x3 ...
- Java内存回收(垃圾回收)机制总结
一.背景: Java程序员编写程序时,对于新建的对象,当不再需要此对象时,不必去释放这个对象所占用的空间,这个工作是由Java虚拟机自己完成的 ,即内存回收或垃圾回收. 二.如何知道一个对象所占用的空 ...
- c++ 10
一.二叉树 1.基本特征 1)树型结构的最简模型,每个节点最多有两个子节点--左子节点和右子节点. 2)单根性,每个子节点有且仅有一个父节点,整棵树有且仅有一个根节点. 3)递归性,以任何一个节点为根 ...
- Net-Snmp安装配置
1. 下载安装 net-snmp安装程序:net-snmp-5.4.2.1-1.win32.exe Perl安装程序:ActivePerl-5.10.0.1004-MSWin32-x86-287188 ...
- 利用内存结构及多线程优化多图片下载(IOS篇)
利用内存结构及多线程优化多图片下载(IOS篇) 前言 下载地址, 后续发布, 请继续关注本blog 在IOS中,我们常常遇到多图片下载的问题.最简单的解决方案是直接利用别人写好的框架.但是这如同练武, ...
- 【转】linux文件系统之mount流程分析
本质上,Ext3 mount的过程实际上是inode被替代的过程. 例如,/dev/sdb块设备被mount到/mnt/alan目录.命令:mount -t ext3 /dev/sdb /mnt/al ...
- Non-negative Partial Sums(单调队列)
Non-negative Partial Sums Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...