点此看题面

大致题意: 有\(6\)个人玩大富翁,共有\(n\)块地,进行\(500\)轮,已知每个人掷骰子掷出\(1\sim6\)的概率。当某人到达一块未被占领的地时,他可以占领它。求最后每个人占有地的期望块数。

概率\(DP\)

这应该是一道概率\(DP\)题。

我们可以定义\(Arrive_{i,j,k}\)表示第\(i\)个人在第\(j\)轮到达第\(k\)块地的概率,\(Never_{i,j,k}\)表示第\(i\)个人在第\(j\)轮及之前从未到达过第\(k\)块地的概率。

显然,初始化\(Arrive_{i,0,1}=1,Never_{i,0,j}=1(1\le j\le n)\)。

然后,我们枚举\(i,j,k\)以及骰子掷出的步数\(t\)来进行转移。

由\(t\)可计算出上一步应由\(pre=(k+n-t\%n-1)\%n+1\)转移过来。

注意转移时应特判\(pre\)不为\(1\),应为\(pre=1\)时说明已经走出了一个循环,接下来会重复计算。

但若这是第一轮,当\(pre=1\)时\(Arrive\)数组依然需要转移,因为\(Arrive\)数组此时只有\(k=1\)的位置上有值。

计算答案

接下来考虑如何计算答案。

我们枚举第\(i\)个人,第\(j\)轮,以及第\(k\)块地,则应将第\(i\)个人的\(ans\)加上下面这个式子:

\[\prod_{t=1}^{i-1}Never_{t,j,k}\cdot Arive_{i,j,k}\cdot\prod_{t=i+1}^6Never_{t,j-1,k}
\]

这应该比较好理解:

  1. 当\(t<i\)时,第\(t\)个玩家比第\(i\)个玩家先走,我们要确保第\(t\)个玩家在这一轮及以前从未走过第\(k\)块地。
  2. 当\(t=i\)时,我们要确保第\(t\)个玩家在这一轮刚好走到第\(k\)块地。
  3. 当\(t>i\)时,第\(t\)个玩家比第\(i\)个玩家后走,因此这个玩家就算这一轮走到第\(k\)块地也没关系,所以只需确保他在这一轮以前从未走过第\(k\)块地即可。

代码

#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define N 500
using namespace std;
int n;double p[7][7],Arrive[7][N+5][N+5],Never[7][N+5][N+5];
int main()
{
RI i,j,k,t,pre;Reg double ans,res;for(scanf("%d",&n),i=1;i<=6;++i) for(j=1;j<=6;++j) scanf("%lf",&p[i][j]);//读入
for(i=1;i<=6;++i)
{
for(Arrive[i][0][1]=j=1;j<=n;++j) Never[i][0][j]=1;//初始化
for(j=1;j<=500;++j) for(k=1;k<=n;++k) for(t=1;t<=6;++t)//枚举状态进行转移
{
(pre=(k+n-t%n-1)%n+1)^1&&(Never[i][j][k]+=p[i][t]*Never[i][j-1][pre]),//转移Never数组
(pre^1||!(j^1))&&(Arrive[i][j][k]+=p[i][t]*Arrive[i][j-1][pre]);//转移Arrive数组
}
}
for(i=1;i<=6;++i,printf("%.3lf\n",ans)) for(ans=0,j=1;j<=500;++j) for(k=1;k<=n;++k)//统计答案
{
for(res=Arrive[i][j][k],t=1;t^i;++t) res*=Never[t][j][k];
for(t=i+1;t<=6;++t) res*=Never[t][j-1][k];ans+=res;
}return 0;
}

【CCPC-Wannafly Winter Camp Day4 (Div1) H】命命命运(概率DP)的更多相关文章

  1. 2020 CCPC Wannafly Winter Camp Day1 C. 染色图

    2020 CCPC Wannafly Winter Camp Day1 C. 染色图 定义一张无向图 G=⟨V,E⟩ 是 k 可染色的当且仅当存在函数 f:V↦{1,2,⋯,k} 满足对于 G 中的任 ...

  2. Wannafly Winter Camp Day8(Div1,onsite) E题 Souls-like Game 线段树 矩阵乘法

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog @ Problem:传送门  Portal  原题目描述在最下面.  简单的 ...

  3. CCPC-Wannafly Winter Camp Day4 Div1 - 咆咆咆哮 - [三分+贪心]

    题目链接:https://zhixincode.com/contest/18/problem/I?problem_id=267 题目描述 输入描述 输出描述 一行一个整数表示答案. 样例输入 1 32 ...

  4. CCPC-Wannafly Winter Camp Day4 Div1 - 置置置换 - [DP]

    题目链接:https://zhixincode.com/contest/18/problem/G?problem_id=265 题目描述 wls有一个整数 $n$,他想请你算一下有多少 $1...n$ ...

  5. CCPC-Wannafly Winter Camp Day4 Div1 - 最小边覆盖 - [线段树]

    题目链接:https://zhixincode.com/contest/18/problem/C?problem_id=261 样例输入 1 4 21 23 4 样例输出 1 Yes 样例输入 2 4 ...

  6. CCPC-Wannafly Winter Camp Day4 Div1 - 夺宝奇兵 - [简单思维题]

    题目链接:https://zhixincode.com/contest/18/problem/A?problem_id=259 题目描述 wls正在玩一个寻宝游戏. 宝藏一共有 $n$ 种,都藏在一个 ...

  7. 【CCPC-Wannafly Winter Camp Day4 (Div1) G】置置置换(动态规划)

    点此看题面 大致题意: 求出有多少个长度为\(n\)的排列满足对于奇数位\(a_{i-1}<a_i\),对于偶数位\(a_{i-1}>a_i\). 考虑打表? 考虑每次只有一个数\(n\) ...

  8. 【CCPC-Wannafly Winter Camp Day4 (Div1) A】夺宝奇兵(水题)

    点此看题面 大致题意: 有\(n\)种宝藏,每种各两个.让你依次获得\(1\sim n\)号宝藏,然后依次获得剩余的\(n\sim1\)号宝藏,求最少步数. 简单结论 其实这题有一个十分简单的结论,即 ...

  9. 【CCPC-Wannafly Winter Camp Day4 (Div1) C】最小边覆盖(简单题)

    点此看题面 大致题意: 给你一个边集的子集,问你这可不可能是这张图的最小边覆盖. 大致思路 考虑到,如果一条边连接的两个点度数都大于等于\(2\),则这条边完全可以删去. 因此,我们只要判断是否存在这 ...

随机推荐

  1. TCP通讯模型简单示例

    1. TCP通讯模型 2. 服务器端 ① 创建socket,用函数socket() ② 绑定IP地址.端口号等信息到socket上,用函数bind() ③ 设置允许的最大连接数,用函数listen() ...

  2. 10.Spring集成一

    1.Email 电子邮件工作原理: 邮件发送方通过邮件发送客户端把邮件发送到发送方的邮件服务器,在发送的过程中需要用到SMTP协议发送方的邮件服务器把邮件发送到接收方的邮件服务器,使用的协议也是SMT ...

  3. 结合element-ui表格自动生成sku规格列表

    最近在写一个根据输入的规格,属性值动态生成sku表格,实现的效果大致如图,这是在vue项目里,结合element-UI表格写的,写好了就整理了一下,把代码贴上来,方便以后使用,不过代码里还是有一些重复 ...

  4. mysql远程连接问题 Lost connection to MySQL server at ‘reading initial communication packet', system error: 0

    在用Navicat for MySQL远程连接mysql的时候,出现了 Lost connection to MySQL server at ‘reading initial communicatio ...

  5. 输入http://localhost/,apache出现You don't have permission to access/on this server.的提示,如何解决?

    本地搭建wamp,输入http://127.0.0.1访问正常,当输入http://localhost/,apache出现You don't have permission to access/on ...

  6. Technical Committee Weekly Meeting 2016.06.21

    Meeting time: 2016.June.21 1:00~2:00 Chairperson:  Thierry Carrez Meeting summary: 1.Add current hou ...

  7. rails4 ckeditor 的部署以及 中文化

    首先ckeditor 要基于paperclip   之后paperclip 需要你在linux 下安装  ImageMagick 具体安装可参考http://my.eoe.cn/guanmac/arc ...

  8. HDU 5375——Gray code——————【dp||讨论】

    Gray code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  9. js 去掉字符串前后空格5种方法

    第一种:循环检查替换 //供使用者调用 function trim(s){ return trimRight(trimLeft(s)); } //去掉左边的空白 function trimLeft(s ...

  10. Chrome谷歌浏览器中js代码Array.sort排序的bug乱序解决办法

    [现象] 代码如下: var list = [{ n: "a", v: 1 }, { n: "b", v: 1 }, { n: "c", v ...