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为该路线的花费. --------- ...
随机推荐
- mybatis常用操作
一.增 1.1 单条 <insert id="addUser" parameterType="com.xxx.model.UserInfo" useGen ...
- The Angles of a Triangle
The Angles of a Triangle You are given the lengths for each side on a triangle. You need to find all ...
- python 程序穩定性閒談-續集
前文再續,書接上一回.上次總結python錯誤碼返回與異常機制共用的一些原則,毫無疑問地,仍會出現程序不穩定的現象(好吧,可能是我個人能力問題).在公司做的一個項目中,出現了因爲使用外部模塊造成pyt ...
- 【转】 ubuntu下fastboot找不到devices
原文网址:http://memory.blog.51cto.com/6054201/1202420 转载补充: 1.首先,手机必须先进入bootloader状态,fastboot devices才能有 ...
- Windows通用应用平台
什么是 UWP? 很多程序员都有一个梦想:希望自己开发的软件能够轻而易举的在所有平台上运行,而不是把同样的需求,用不同的技术.工具重新开发才能够运行在所有平台上.这就是跨平台,很多软件从业者都在为这个 ...
- 【BBST 之伸展树 (Splay Tree)】
最近“hiho一下”出了平衡树专题,这周的Splay一直出现RE,应该删除操作指针没处理好,还没找出原因. 不过其他操作运行正常,尝试用它写了一道之前用set做的平衡树的题http://codefor ...
- 【转】Linux下查看TCP网络连接情况
查看TCP网络连接情况 命令:netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ www.2cto.com 返回结 ...
- WPF ICommand 用法
基础类,继承与ICommand接口 using System; using System.Collections.Generic; using System.Linq; using System.Te ...
- Git 提供篇
1. Git自动补全 假使你使用命令行工具运行Git命令,那么每次手动输入各种命令是一件很令人厌烦的事情.为了解决这个问题,你可以启用Git的自动补全功能,完成这项工作仅需要几分钟. 为了得到这个脚本 ...
- vue-router 快速入门
ue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用.vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来.传统的页面应用 ...