洛谷P2059 卡牌游戏 [JLOI2013] 概率dp
正解:概率dp
解题报告:
考虑倒推,因为发现关于什么淘不淘汰之类的,如果我们倒推就完全不要考虑辣.
于是设$f_{i,j}$表示当前剩余$i$个人,从庄家数第$j$个人的获胜概率.
初始化是$f_{1,1}=100$(意义为$100/%$.没什么意义只是因为我当初写的时候比较呆而已.$QwQ$
然后关于转移,首先发现我们并不在意庄家是谁,有意义的只是相对位置,是趴
首先两个人的时候
第一个人是庄家,那我们根据牌$mod\ 2$的余数进行分类,然后就能得到两类,一类能让$1$号玩家(也就是庄家赢),一类能让$2$号玩家(也就是庄家的下一个人赢),这时候我们就能得到$f_{2,1},f_{2,2}$的答案辽
然后再看三个人的时候
那就根据$mod\ 3$的余数分类
如果余数$=0$,庄家死了,庄家之后的玩家就变成了上一层我们讨论的状态,即庄家+1变成了上一层的庄家,他的概率就加上.让庄家死的概率乘以上一层他是庄家的时候赢的概率;庄家+2变成上一层庄家的下一个,他的概率就加上.让庄家死的概率乘以上一层他是庄家的下一个人赢的概率
余数等于$1,2$差不多转移下就成.
然后通过上面那个分类讨论事实上就已经可以知道这题转移了?然后就做完了$QwQ$
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rp(i,x,y) for(register ll i=x;i<=y;++i) ll n,m,card[];
double f[][]; ll read()
{
char ch=getchar();ll x=;bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=getchar();
if(ch=='-')ch=getchar(),y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=getchar();
return y?x:-x;
}
void add(ll &x,ll y){x++;if(x>y)x=;} int main()
{
n=read();m=read();
rp(i,,m)card[i]=read();f[][]=;
rp(i,,n)
rp(j,,m)
{
ll q=(!card[j]%i)?j:card[j]%i;
rp(k,,i-){add(q,i);f[i][q]+=(double)f[i-][k]/(double)m;}
}
rp(i,,n)printf("%.2lf%% ",f[n][i]);
return ;
}
洛谷P2059 卡牌游戏 [JLOI2013] 概率dp的更多相关文章
- 【Luogu】P2059卡牌游戏(概率DP)
题目链接 这绝壁是道紫难度的题 请移步xyz32678的题解. 设f[i][j]是有i个人参加了游戏,1是庄家,最后j胜出的概率. 我们可以发现,这个游戏影响胜出的概率的只有庄家的相对位置和人数,跟玩 ...
- BZOJ_3191_[JLOI2013]卡牌游戏_概率DP
BZOJ_3191_[JLOI2013]卡牌游戏_概率DP Description N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随 ...
- 【BZOJ】3191 [JLOI2013]卡牌游戏(概率dp)
题目 传送门:QWQ 分析 算是概率dp不错的题. $ dp[i][j] $表示有i个人时,这i个人中的第j个获胜的概率. 我们把i从1推到n,那么答案就是$ dp[n][i] $ 然后我们规定,第一 ...
- 【概率DP】$P2059$ 卡牌游戏
链接 题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字为X,则庄家 ...
- 洛谷P3706 [SDOI2017]硬币游戏(概率生成函数+高斯消元)
题面 传送门 题解 不知道概率生成函数是什么的可以看看这篇文章,题解也在里面了 //minamoto #include<bits/stdc++.h> #define R register ...
- 洛谷3830 [SHOI2012]随机树 【概率dp】
题目 输入格式 输入仅有一行,包含两个正整数 q, n,分别表示问题编号以及叶结点的个数. 输出格式 输出仅有一行,包含一个实数 d,四舍五入精确到小数点后 6 位.如果 q = 1,则 d 表示叶结 ...
- 洛谷 P2059 [JLOI2013]卡牌游戏 解题报告
P2059 [JLOI2013]卡牌游戏 题意 有\(n\)个人玩约瑟夫游戏,有\(m\)张卡,每张卡上有一个正整数,每次庄家有放回的抽一张卡,干掉从庄家起顺时针的第\(k\)个人(计算庄家),干掉的 ...
- [JLOI2013]卡牌游戏 概率DP
[JLOI2013]卡牌游戏 概率DP 题面 \(dfs\)复杂度爆炸,考虑DP.发现决策时,我们只用关心当前玩家是从庄家数第几个玩家与当前抽到的牌是啥.于是设计状态\(f[i][j]\)表示有\(i ...
- bzoj千题计划202:bzoj3191: [JLOI2013]卡牌游戏
http://www.lydsy.com/JudgeOnline/problem.php?id=3191 每个人获胜的概率只与其在排列中与庄家的相对位置有关 dp[i][j] 还剩i个人时,从庄家数第 ...
随机推荐
- 使用Html和ashx文件实现其简单的注册页面
记得上一次博客中实现的是其登录页面,其实学会了登录页面,注册页面自然就知道怎么写啦,都是一个意思的,但是今天不知道怎么个情况,写一个注册页面程序 中 一直在出错,大的问题小的问题一直出错,似乎是不在状 ...
- 解决react-router 的activeClassName 首页重复匹配问题
首先先看一下我的inedx.js入口文件: 这是未点击的时候index默认的是选中状态, 这是我点击其他的路由之后:,明显index路由重复了,仔细看了官方文档之后,发现其实Navlink也应该使用e ...
- IOS 第三方支付的使用:支付宝
本文转载至 http://blog.csdn.net/u014011807/article/details/47726799 总结一下支付宝iOS使用步骤: 1 第三方支付:支付宝 使用过程: 1. ...
- 安装win7到移动硬盘
jpg改rar http://www.360doc.com/content/16/0816/10/19373891_583556875.shtml
- 【cs229-Lecture8】顺序最小优化算法
ref: blog:http://zhihaozhang.github.io/2014/05/20/svm4/ <数据挖掘导论> 真正的大神是当采用的算法表现出不是非常好的性能的时候 ...
- c++ 单步查看汇编代码【转】
form here 用gdb 查看汇编代码, 采用disassemble 和 x 命令. nexti, stepi 可以单步指令执行 如下例: ---------------------------- ...
- python函数定义语法总结
见下面代码及注释: def calc(value): sum=0 for m in value: sum=sum+m return sum data=[1,2,3,4,5,6,7,8,9,10] pr ...
- 题目1453:Greedy Tino(dp题目)
题目链接:http://ac.jobdu.com/problem.php?pid=1453 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- [原]Linux下清空文件内容的三种方法
========问题======== 有些文件需要清空内容而不改变属性 =======解决方案====== 1.直接删除,创建同名文件.(这种方法的弊端是有可能这个文件带着权限或者是属性,那么你新建这 ...
- 应该了解的Openstack命令
整理一下Openstack的命令.下面的命令,我都是全部在机器验证过,主要是参考 redhat文档 查看rabbitmq 队列 rabbitmqctl list_queues 查看keystone的用 ...