Where to Run LightOJ - 1287(概率dp)
Where to Run LightOJ - 1287(概率dp)
题面长长的,看了半天也没看懂题意
不清楚的地方,如何判断一个点是否是EJ
按照我的理解 在一个EJ点处,要么原地停留五分钟接着走,要么直接走,但是这样样例都对不上
mmp,原来是说,在原地停留五分钟后再继续这两种选择
而且题目问的是 求被警察抓的期望时间,实际上却是求遍历完整张图的期望时间,也就是说总是会走是EJ的点
对于每个点来说从该点出发的期望时间\(dp[i] = \frac{dp[i]+5}{cnt+1} + \frac{\sum(dp[j]+w[i][j])}{cnt+1} 其中j是所有下一个可达的EJ点,cnt表示可达的EJ点的个数\)
化简一下 $ dp[i] = \frac{5 + \sum(dp[j]+w[i][j])}{cnt}\(
由于走的点不能重复,自然就是一个状压dp了,题目的点数n自然也就是\)n<=15$的
dp[u][s] 表示从u出发 已经遍历图的结点状态为s 遍历完整张图的期望时间
can[u][s] 表示从u出发 已经遍历图的结点状态为s 能否遍历完整张图
然后同时记忆化搜索就好了
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int N = 15;
double dp[N][1<<N];
int g[N][N],can[N][1<<N];
int n, m;
int dfs(int u,int s){
if(s == (1<<n) - 1){
dp[u][s] = 0;
return 1;
}
if(can[u][s] != -1) return can[u][s];
int cnt = 0;
double res = 0;
for(int i = 0;i < n;i++){
if(g[u][i] && i != u && !((1<<i) & s) && dfs(i,(1<<i)|s)) res += dp[i][s|(1<<i)] + g[u][i],cnt++;
}
if(cnt) res += 5,res /= cnt;
can[u][s] = cnt?1:0;
dp[u][s] = res;
return can[u][s];
}
int main()
{
int T, cas = 1;
cin>>T;
while(T--){
scanf("%d%d",&n,&m);
memset(g,0,sizeof(g));
for(int i = 0;i < m;i++){
int u, v, w;
scanf("%d%d%d",&u,&v,&w);
g[u][v] = g[v][u] = w;
}
printf("Case %d: ",cas++);
memset(can,-1,sizeof(can));
dfs(0,1);
printf("%.12f\n",dp[0][1]);
}
return 0;
}
Where to Run LightOJ - 1287(概率dp)的更多相关文章
- A Dangerous Maze (II) LightOJ - 1395(概率dp)
A Dangerous Maze (II) LightOJ - 1395(概率dp) 这题是Light Oj 1027的加强版,1027那道是无记忆的. 题意: 有n扇门,每次你可以选择其中一扇.xi ...
- LightOJ - 1151概率dp+高斯消元
概率dp+高斯消元 https://vjudge.net/problem/LightOJ-1151 题意:刚开始在1,要走到100,每次走的距离1-6,超过100重来,有一些点可能有传送点,可以传送到 ...
- LightOJ 1038 概率dp
题意:给一个数n,每次除它的一个因子(等概率),问除到1的次数的期望是多少 题解:概率dp,对于一个数x,y是x的因子个数,因子是a1到ay,E(x)=(E(a1)+1)/y+...+(E(ay)+1 ...
- lightoj 1030 概率dp
题目链接:http://lightoj.com/volume_showproblem.php?problem=1030 #include<cstdio> #include<cstri ...
- LightOJ - 1079 概率dp
题意:n个银行,每个有价值和被抓概率,要求找被抓概率不超过p的最大价值 题解:dp[i][j]表示前i个取j价值的所需最小概率,01背包处理,转移方程dp[i][j]=min(dp[i-1][j],d ...
- Lights inside 3D Grid LightOJ - 1284 (概率dp + 推导)
Lights inside 3D Grid LightOJ - 1284 题意: 在一个三维的空间,每个点都有一盏灯,开始全是关的, 现在每次随机选两个点,把两个点之间的全部点,开关都按一遍:问k次过 ...
- Snakes and Ladders LightOJ - 1151( 概率dp+高斯消元)
Snakes and Ladders LightOJ - 1151 题意: 有100个格子,从1开始走,每次抛骰子走1~6,若抛出的点数导致走出了100以外,则重新抛一次.有n个格子会单向传送到其他格 ...
- lightoj 1408 概率dp
https://blog.csdn.net/moon_sky1999/article/details/98097470 博主在此,牛逼神犇 #include<bits/stdc++.h> ...
- LightOJ 1364 树形DP
52张扑克牌,问拿到指定数量的4个花色的最少次数期望是多少,其中拿到joker必须马上将其视作一种花色,且要使后续期望最小. 转移很容易想到,主要是两张joker的处理,一个状态除了普通的4个方向的转 ...
随机推荐
- 3.2.5 Magic Squares 魔板
3.2.5 Magic Squares 魔板 成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 我们知道魔板的每一个方 ...
- tcp服务端socket
import socket if __name__ == '__main__': # 创建tcp服务端socket tcp_server_socket = socket.socket(socket.A ...
- Shell 入门笔记(一)
Shell简介 在开发过程中Linux系统经常接触和使用的,Shell 是我们用户使用 Linux 的桥梁,是C 语言编写的程序.Shell 是一种命令语言,同时一种程序设计语言.对大多数开发人员来说 ...
- python学习之列表和元组
配置环境:python 3.6 python编辑器:pycharm,代码如下: #!/usr/bin/python # -*- coding: UTF-8 -*- # list:是一种有序的集合,可以 ...
- Python必学:使用哪款文本编辑器更好?
Python的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍. 所以,实际开发的时候,我们总是使用一个文本编辑器来写代码,写完了,保存为一个文件,这样,程 ...
- win10鼠标右键菜单在左边,怎么改回右边
键盘上按WIN+R打开运行窗口,输入shell:::{80F3F1D5-FECA-45F3-BC32-752C152E456E}按回车键
- Pandas库入门
pandas库的series类型
- 9,Flask 中的蓝图(BluePrint)
蓝图,听起来就是一个很宏伟的东西,在Flask中的蓝图 blueprint 也是非常宏伟的,它的作用就是将 功能 与 主服务 分开. 比如说,你有一个客户管理系统,最开始的时候,只有一个查看客户列表的 ...
- (原)App源码
序) 人生就像卫生纸,有事没事少扯 前言) 最近偶尔和一位极客大牛聊了一次,这个极客在汇编的造诣算是相当高,不过野路子出来看不起各种规矩,因此是适合做个自己蒙头研究技术的极客男,不适合大型团队,不适合 ...
- 图解-Excel的csv格式特殊字符处理方式尝试笔记(个人拙笔)
Excel格式如下.(截图来自,WPS Office) CSV是一种文本格式的Excel文档格式.不支持Excel的字体特效(比如加粗,颜色)等等的保存. 每一行数据用 "\n" ...