[BZOJ 3191][JLOI 2013]卡牌游戏
觉得这题很有必要讲一下!
现在发现在做概率题,基本是向 dp 和 马尔可夫链 靠齐
但是这一题真是把我坑了,因为状态太多,马式链什么的直接死了
我一开始的想法就是用 f[i][j] 表示剩余 i 个人,现由 j 坐庄
恩~ dp 方程还是老好想的嘛~
wait! wait!! wait!!! 这尼马有后效性啊!有后效性啊!!
然后想了半天毫无进展,一看题解……
哎呦我 c
其实那个方程几乎对了,但!是!有后效性就要用重标号的方法去掉!
怎么算去了呢?
其实……谁是谁更本不重要!
如果我们对每个人 i 都重标号为 0 ,列一次方程,那么每次都只算第 0 个人 (变为 0~n-1 个人) 存活的概率 即 f[1][0] 即可
所有方程的区别只在边界条件不同而已,标号什么的完全不用管,也就没有后效性了!
然后我们只要保证 0 不 over 即可,其他的都可以不用管了
若这一轮的标号是 0~i , 然后第 j 个人 over 的话
新标号为 0~i-1, 但是这里的 j~i-1 其实是原来的 j+1~i
但是我们不用去管标号变了的问题,因为本质上是一样的
f[i][(j+a[k]-1)%(i+1)]+=f[i+1][j]/M
这么写就可以了,但是还有个问题:
0 是不能被删的我们注意到在 f[i+1] -> f[i] 时
f[i][0] 其实是 0 被删去后 1 变为 0 坐庄的概率
但 0 存活到了最后,这是无法取的(事实上若 0 活到了最后,1 就不可能坐庄)
那么 f[i][0] 其实是什么呢?
f[i][i]!
因为这是一个环,在剩余 i+1 个人时,删掉了第 i 个人,在坐庄时当然由第 0 人来,这时所有人都没有被重标号
#include <cstdio>
#include <cstring>
const int sizeOfPlayer=;
const int sizeOfCard=; inline int getint(); int N, M;
int a[sizeOfCard];
double f[sizeOfPlayer][sizeOfCard]; int main()
{
N=getint(), M=getint();
for (int i=;i<M;i++)
a[i]=getint(); for (int p=;p<N;p++)
{
memset(f, , sizeof(f));
f[N][(N-p)%N]=1.0;
for (int i=N-;i;i--)
{
for (int j=;j<=i;j++)
for (int k=;k<M;k++)
f[i][(j+a[k]-)%(i+)]+=f[i+][j]/M;
f[i][]=f[i][i];
} if (p) putchar(' ');
printf("%.2lf%%", f[][]*);
} putchar('\n'); return ;
} inline int getint()
{
register int num=;
register char ch;
do ch=getchar(); while (ch<'' || ch>'');
do num=num*+ch-'', ch=getchar(); while (ch>='' && ch<='');
return num;
}
说的不清楚还请见谅
[BZOJ 3191][JLOI 2013]卡牌游戏的更多相关文章
- JLOI 2013 卡牌游戏
问题描述: N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字为X,则庄家首先 ...
- JLOI 2013 卡牌游戏 bzoj3191
题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字为X,则庄家首先把 ...
- bzoj千题计划202:bzoj3191: [JLOI2013]卡牌游戏
http://www.lydsy.com/JudgeOnline/problem.php?id=3191 每个人获胜的概率只与其在排列中与庄家的相对位置有关 dp[i][j] 还剩i个人时,从庄家数第 ...
- BZOJ 4392 卡牌游戏
Description 奶牛贝茜是卡牌游戏的狂热爱好者, 但是令人吃惊的, 她缺乏对手. 不幸的是, 任何牧 群里的其他牛都不是好对手. 他们实在是太差了 , 实际上, 他们玩卡牌游戏时会遵循一种完全 ...
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
- BZOJ_3191_[JLOI2013]卡牌游戏_概率DP
BZOJ_3191_[JLOI2013]卡牌游戏_概率DP Description N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随 ...
- 洛谷 P2059 [JLOI2013]卡牌游戏 解题报告
P2059 [JLOI2013]卡牌游戏 题意 有\(n\)个人玩约瑟夫游戏,有\(m\)张卡,每张卡上有一个正整数,每次庄家有放回的抽一张卡,干掉从庄家起顺时针的第\(k\)个人(计算庄家),干掉的 ...
- 【BZOJ3191】【JLOI2013】卡牌游戏 [DP]
卡牌游戏 Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description N个人坐成一圈玩游戏.一开始我 ...
- TCG卡牌游戏研究:《炉石战记:魔兽英雄传》所做的改变
转自:http://www.gameres.com/665306.html TCG演进史 说到卡牌游戏,大家会联想到什么呢? 是历史悠久的扑克牌.风靡全球的<MTG 魔法风云会>与< ...
随机推荐
- iOS UITableView 引起的崩溃问题
其实 UITableView 应该是在iOS开发中使用最频繁的一个控件,一次同事之间聊天玩笑的说“一个页面,要是没使用UITableView,就好像称不上是一个页面”.虽然是个最常见的控件,但是他的强 ...
- centos添加硬盘
fdisk -l ## 这里是查看目前系统上有几块硬盘 Disk /dev/sda: 36.4 GB, 36401479680 bytes 255 heads, 63 sectors/track, 4 ...
- 程序内部让用户直接上appstore评价游戏的链接地址以及跳转方法
NSString *str = [NSString stringWithFormat:@"itms-apps://ax.itunes.apple.com/WebObjects/MZStore ...
- Cairo 下载,测试
You need to download the all-in-one bundle available here. You can discover this link yourself by vi ...
- Outlook不能预览和打开Excel文件:
无法打开Outlook邮箱中的Excel附件,确实让人恼火 先不要着急: 1.在开始->运行,输入"regedit" 2.找到路径:HKEY_CURRENT_USER\Sof ...
- [Python]记录详细调用堆栈的日志
参考http://www.cnblogs.com/tuzkee/p/3243110.html import sys import os def detailtrace(info): retStr = ...
- ios网络请求特殊字符&处理
原文地址:http://www.xuebuyuan.com/2039420.html CFURLCreateStringByAddingPercentEscapes 在作项目的的时候,一般都要用到网络 ...
- JSP弹出窗口和模式对话框
本文转载于其它blog,在此向本文原创者,致意! JSP 弹出窗口 一.window.open() 基础知识 1.window.open()支持环境: JavaScript1.0+ ...
- fork函数创建新进程过程分析
gdb调试执行流程,首先设置断点b sys_clone,当在shell下输入fork命令后,系统执行至断点,接下来按步执行: 判断是否被跟踪 判断是否被创建为轻量级进程(vfork) 判断父进程是否被 ...
- 解决JS中各浏览器Date格式不兼容的问题
IE,Chrome和FireFox等浏览器都支持的一种日期格式是:2015/11/30 19:29:23. 所以,可以这样写: var timeStr = new Date("2015/11 ...