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)的更多相关文章

  1. A Dangerous Maze (II) LightOJ - 1395(概率dp)

    A Dangerous Maze (II) LightOJ - 1395(概率dp) 这题是Light Oj 1027的加强版,1027那道是无记忆的. 题意: 有n扇门,每次你可以选择其中一扇.xi ...

  2. LightOJ - 1151概率dp+高斯消元

    概率dp+高斯消元 https://vjudge.net/problem/LightOJ-1151 题意:刚开始在1,要走到100,每次走的距离1-6,超过100重来,有一些点可能有传送点,可以传送到 ...

  3. LightOJ 1038 概率dp

    题意:给一个数n,每次除它的一个因子(等概率),问除到1的次数的期望是多少 题解:概率dp,对于一个数x,y是x的因子个数,因子是a1到ay,E(x)=(E(a1)+1)/y+...+(E(ay)+1 ...

  4. lightoj 1030 概率dp

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1030 #include<cstdio> #include<cstri ...

  5. LightOJ - 1079 概率dp

    题意:n个银行,每个有价值和被抓概率,要求找被抓概率不超过p的最大价值 题解:dp[i][j]表示前i个取j价值的所需最小概率,01背包处理,转移方程dp[i][j]=min(dp[i-1][j],d ...

  6. Lights inside 3D Grid LightOJ - 1284 (概率dp + 推导)

    Lights inside 3D Grid LightOJ - 1284 题意: 在一个三维的空间,每个点都有一盏灯,开始全是关的, 现在每次随机选两个点,把两个点之间的全部点,开关都按一遍:问k次过 ...

  7. Snakes and Ladders LightOJ - 1151( 概率dp+高斯消元)

    Snakes and Ladders LightOJ - 1151 题意: 有100个格子,从1开始走,每次抛骰子走1~6,若抛出的点数导致走出了100以外,则重新抛一次.有n个格子会单向传送到其他格 ...

  8. lightoj 1408 概率dp

    https://blog.csdn.net/moon_sky1999/article/details/98097470 博主在此,牛逼神犇 #include<bits/stdc++.h> ...

  9. LightOJ 1364 树形DP

    52张扑克牌,问拿到指定数量的4个花色的最少次数期望是多少,其中拿到joker必须马上将其视作一种花色,且要使后续期望最小. 转移很容易想到,主要是两张joker的处理,一个状态除了普通的4个方向的转 ...

随机推荐

  1. 读取hdfs目录,并在web页面上展示文件里的内容

    最终效果图 目录树实体类: /** * @Author: DaleyZou * @Description: hdfs 目录结构的实体类,用于展示目录树的支撑操作 * @Date: Created in ...

  2. Hibernate进阶学习4

    Hibernate进阶学习4 深入学习hibernate的查询语句 测试HQL查询 package com.hibernate.test; import com.hibernate.domain.Cu ...

  3. 经典sql语句汇总

    1,某条数据放首位,其他倒序并分页 select * from Student order by( case     when id='2'  then 1 ELSE 4 END),id desc l ...

  4. java使用apache-poi生成excel表格

    public static void main(String[] args) throws IOException { // TODO Auto-generated method stub //创建一 ...

  5. 简单了解一下oracle中的显示游标和存储过程

    游标 游标主要分两类动态和静态游标,静态游标是编译时知道明确的select语句的游标,静态游标分类两种,显示游标和静态游标,这里只说显示游标 显示游标 declare name emp.ename%t ...

  6. C++高级 STL——模板函数、模板类

    1.模板函数 // 定义 template <class T> Max(T &t1, T &t2) { return ((t1 > t2) ? t1 : t2); } ...

  7. Poweroj:2425-跳台阶(经典递推)

    题目链接:https://www.oj.swust.edu.cn/problem/show/2425 跳台阶 Edit Manage Data Rejudge Time Limit: 1000 MS ...

  8. Highest Tower 18中南多校第一场H题

    一.题意 给出N个方块,要求给出一个方案,使得1. 所有方块都被使用到(题目数据保证这点) 2.所有方块垒成一个塔,且上面的方块宽度小于下面的方块 3.每个方块只能用一次,可以横着或者竖着. n范围5 ...

  9. 18,Shell编程实战

      为什么要学习Shell编程 Shell脚本语言是实现Linux/Unix系统管理及自动化运维所必须的重要工具,Linux系统的底层以及基础应用软件的核心大都涉及Shell脚本的内容. 一个合格的L ...

  10. 通过广播关闭应用程序(每个Activity)和连续点击两次返回键关闭应用程序

    对于一个应用程序可能有很多个Activity,可能每个人并不想一个个的去关闭Activity,也有可能忘了,那怎么关闭所有的未关闭的Activity呢,其实有很多方法,但是我最喜欢的一种就是通过广播事 ...