bestcoder #67 div2 1003 Black Jack 概率dp
Black Jack
21点又名黑杰克(英文:Blackjack),起源于法国,已流传到世界各地。 21点,是一种使用扑克牌玩的赌博游戏。亦是唯一一种在赌埸中可以在概率中战胜庄家的一种赌博游戏。 ———来自好搜百科 我们定义21点的规则如下,和原始规则稍微不一样。 牌点数如下: A 2 3 4 5 6 7 8 9 10 J Q K A当成1点 JQK全部当成10点。 我们假设赌场准备了很多副牌,也就是可以假设每次摸到每张牌的概率是一样的。 玩家有两个人,分别为庄家和闲家。 一开始两人都拿两张牌,两个人都可以看到对方的牌。 闲家先操作,每次可以叫牌或者停止叫牌。 如果叫牌,从牌堆中拿一张牌,一旦叫牌后手牌超过21点,直接判输,称为“爆点”,否则一直叫牌直到停止叫牌,轮到庄家。 轮到庄家后,跟闲家一样的叫牌或停止叫牌,一旦爆点也是直接判输。 如果没有爆点,谁点数大就谁赢,点数一样判平。 给你两家的牌,如果闲家胜率>50%输出"YES",否则输出"NO" 哦,对了,每个人都是绝顶聪明的。
第一行一个数Test(Test<=100000)。表示数据组数。 下面每组数据,一个4字符字符串,前两个字符表示闲家的牌,后两张表示庄家的。 (用T表示10)
对于每组数据输出"YES"或者"NO",表示闲家是否有50%以上的胜率。
1 TTT9
YES //很明显闲家并不会叫牌,庄家只有2/13的机会赢。 dp1[a][b]表示闲家和庄家点数分别为a和b时闲家叫牌时闲家的胜率,dp2[a][b]表示闲家和庄家点数分别为a和b时庄家叫牌时闲家的胜率。答案为dp1(a,b)>0.5。
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #define REP(i,a,b) for(int i=a;i<=b;i++) #define MS0(a) memset(a,0,sizeof(a))using namespace std;typedef long long ll; const int maxn=31; const int INF=1<<29; const double EPS=0.0000000001;char s[maxn]; int n; int a,b; double dp1[maxn][maxn]; double dp2[maxn][maxn];int shu(char x) {if(x=='A') return 1;if(x=='T'||x=='J'||x=='K'||x=='Q') return 10;return x-'0'; }double dfs2(int a,int b) {double &res=dp2[a][b];if(res>-EPS) return res;if(a<=b) return res=0;res=0;REP(i,1,9){if(b+i<=21) res+=dfs2(a,b+i)/13;else res+=1.0/13;}REP(i,1,4){if(b+10<=21) res+=dfs2(a,b+10)/13;else res+=1.0/13;}return res; }double dfs1(int a,int b) {double &res=dp1[a][b];if(res>-EPS) return res;res=0;REP(i,1,9) if(a+i<=21) res+=dfs1(a+i,b)/13;REP(i,1,4) if(a+10<=21) res+=dfs1(a+10,b)/13;res=max(dfs2(a,b),res);return res; }int main() {freopen("in.txt","r",stdin);int T;cin>>T;while(T--){scanf("%s",s);a=shu(s[0])+shu(s[1]);b=shu(s[2])+shu(s[3]);REP(i,1,maxn-1) REP(j,1,maxn-1) dp1[i][j]=dp2[i][j]=-1.0;puts(dfs1(a,b)>0.5+EPS?"YES":"NO");}return 0; }
View Code
转载于:https://www.cnblogs.com/--560/p/5079365.html
bestcoder #67 div2 1003 Black Jack 概率dp相关推荐
- hdu 3853 LOOPS 概率DP
简单的概率DP入门题 代码如下: 1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 ...
- HDU-4035 Maze 概率DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4035 很不错的概率DP题目,因为这题是无向图,所以要对叶节点和非叶节点考虑,然后列出方程后,因为数据很 ...
- 2018.09.01 poj3071Football(概率dp+二进制找规律)
传送门 概率dp简单题. 设f[i][j]表示前i轮j获胜的概率. 如果j,k能够刚好在第i轮相遇,找规律可以发现j,k满足: (j−1)>>(i−1)(j−1)>>(i−1) ...
- Discovering Gold LightOJ - 1030[概率dp或者记忆化搜索]
题目大意:有一个[1,n][1,n][1,n]的数轴,数轴上的每个对应位置上都有金矿,你初始位置是1,然后你每次都会投色子决定你下一步跳到哪里,如果你跳出了nnn,那么你就要重新投.问你跳到nnn的时 ...
- 【原创】概率DP总结 by kuangbin
概率DP主要用于求解期望.概率等题目. 转移方程有时候比较灵活. 一般求概率是正推,求期望是逆推.通过题目可以体会到这点. 首先先推荐几篇参考的论文: <信息学竞赛中概率问题求解初探> & ...
- poj 3071 Football(概率dp)
http://poj.org/problem? id=3071 大致题意:有2^n个足球队分成n组打比赛.给出一个矩阵a[][],a[i][j]表示i队赢得j队的概率.n次比赛的流程像这样France ...
- HDU 5001 概率DP || 记忆化搜索
2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP 測 ...
- HDU - 4035 Maze(概率dp)
题目链接:点击查看 题目大意:给出一个 n 个点的树,初始时位于点 1 ,每个点都会给出一个概率 k[ i ] 和一个概率 e[ i ] ,其代表的意义分别是: k[ i ] :在点 i 有 k[ i ...
- SDUT - 2623 The number of steps(概率dp)
题目链接:点击查看 题目大意:给出一个 n 层的三角形,第一层有 1 个点,第二层有 2 个点,第三层有 3 个点 ... 第 n 层有 n 个点,现在规定从第一层的点向下出发: 如果左下方有点并且右 ...
最新文章
- 剑网三缘起,签到领奖活动还能获得白猫,满级玩家5天就得跟宠
- java编程好文章链接收集
- 怎样理解阻塞非阻塞与同步异步的区别?
- 如何获取 SAP Commerce Cloud Spartacus UI 购物车 Cart 的加载状态
- Hazelcast入门指南第4部分
- C++的extern关键字
- macOS的控制台Console.app
- Docker 深入理解概念
- java搭建线程池框架_JAVA线程池经管及分布式HADOOP调剂框架搭建
- 兰州职称计算机中心,【兰州2013年职称计算机考试报名通知】- 环球网校
- 矩池云上matplotlib显示中文乱码
- c语言创建空顺序表的程序,用C语言编写一个完整的程序,实现顺序表的建立、插入、删除、输出等基本运算。...
- es6 Map,Set 和 WeakMap,WeakSet
- 40个Android源码学习实例
- C++编写COM组件 ATL工程
- visio绘图小技巧
- 非线性回归算法--学习笔记
- 手机idea开发Java_用IntelliJ IDEA开发Android程序
- hdmiout 68411升级
- 超详细带你入门开发一个超实用的浏览器插件