博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LiberOJ#6178. 「美团 CodeM 初赛 Round B」景区路线规划 概率DP
阅读量:4509 次
发布时间:2019-06-08

本文共 2194 字,大约阅读时间需要 7 分钟。

题意

游乐园被描述成一张 n 个点,m 条边的无向图(无重边,无自环)。每个点代表一个娱乐项目,第 i 个娱乐项目需要耗费 ci 分钟的时间,会让小 y 和妹子的开心度分别增加 h1i ,h2i ,他们俩初始的开心度都是 0 。每条边代表一条路,第 i 条边连接编号为 xi , yi 的两个娱乐项目,从 xi 走到 yi 或者从 yi 走到 xi 耗费的时间都是 ti 分钟。小 y 和妹子预计在游乐园里玩 k 分钟。最开始的时候,小 y 和妹子会等概率的随机选择一个娱乐项目开始玩,每玩完一个项目后,小 y 和妹子会等概率的随机选择一个可以从当前项目直达的且来得及玩的项目作为下一个项目。如果玩完一个项目后周围没有可以直达的且来得及玩的项目,小 y 和妹子就会提前结束游玩。 请你分别计算小 y 和妹子在游玩结束后开心度的期望。

数据

输入第一行给出三个空格隔开的整数,分别表示 n,m,k

接下来的 n 行,每行三个空格隔开的整数,分别表示 ci,h1i,h2i
接下来的 m 行,每行三个空格隔开的整数,分别表示 xi,yi,ti

输出两个用空格隔开的实数,分表表示小 y 和妹子开心度的期望,精确到小数点后 5 位。

0<n≤100,1×60≤k≤8×60

10≤ci≤60,0<h1i,h2i≤100

0<ti≤15

输入

5 4 60

25 12 83
30 38 90
16 13 70
22 15 63
50 72 18
2 1 7
3 1 7
4 3 1
5 3 10

输出

39.20000 114.40000

 

题解:

  设定pair<double ,double> dp[i][j],表示到达并玩完第 i 个项目,两个人的期望

  转移就是向能走的点,走下去,期望总和/cnt,就是累积的ans

  看代码吧

#include
using namespace std;#pragma comment(linker, "/STACK:102400000,102400000")#define ls i<<1#define rs ls | 1#define mid ((ll+rr)>>1)#define pii pair
#define MP make_pairtypedef long long LL;const long long INF = 1e18+1LL;const double pi = acos(-1.0);const int N = 5e2+5, M = 1e3+20,inf = 2e9+10;int n,m,K,t = 1,c[N],h1[N],h2[N],head[N];struct ss{ int to,next,value;}e[N*N];void add(int u,int v,int w) { e[t].to = v; e[t].next = head[u]; e[t].value = w; head[u] = t++;}pair
dp[N][500];int vis[N][500];pair
dfs(int u,int k) { if(vis[u][k]) return dp[u][k]; vis[u][k] = 1; pair
& ret = dp[u][k],now; ret = MP(h1[u],h2[u]); int cnt = 0; for(int i = head[u]; i; i = e[i].next) { int to = e[i].to; if(k >= c[to]+e[i].value)cnt++; } for(int i = head[u]; i; i = e[i].next) { int to = e[i].to; if(k < c[to] + e[i].value) continue; now = dfs(to,k - c[to] - e[i].value); ret.first += now.first*1.0/cnt; ret.second += now.second*1.0/cnt; } //cout<
<<" "<
<<" "<
<<" "<
<
ans = MP(0,0),now; for(int i = 1; i <= n; ++i) { now = dfs(i,K - c[i]); ans.first += now.first*1.0/n; ans.second += now.second*1.0/n; } printf("%.5f %.5f\n",ans.first,ans.second); return 0;}

 

转载于:https://www.cnblogs.com/zxhl/p/7135893.html

你可能感兴趣的文章
JS--我发现,原来你是这样的JS(三)(基础概念--灵魂篇)
查看>>
手指滑动切换手机图片
查看>>
解决Oracle EM无法启动
查看>>
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
查看>>
PHP 跨域资源共享 CORS 设定
查看>>
男神鹏:使用Redis 的一些 问题解决方案。
查看>>
创建空间参考
查看>>
TestFlight下载app 初使用
查看>>
promise学习
查看>>
在vagrant官网下载各种最新.box资源
查看>>
selenium+python自动化95-弹出框死活定位不到
查看>>
关于防止用户表单多次提交方案的思考
查看>>
MAC终端显示tree命令
查看>>
Dissecting the First C# Program "HelloWorld"
查看>>
多线程--生产者消费者--简单例子
查看>>
Mac 安装tensorflow
查看>>
jsoup html解析器 实现对博客园博文标题链接抓取
查看>>
数据库面试题
查看>>
Flex 延时控制三步走
查看>>
T-SQL表联接查询
查看>>