Black Jack

 Accepts: 0
 Submissions: 61
 Time Limit: 2000/1000 MS (Java/Others)
 Memory Limit: 65536/65536 K (Java/Others)

问题描述
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相关推荐

  1. hdu 3853 LOOPS 概率DP

    简单的概率DP入门题 代码如下: 1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 ...

  2. HDU-4035 Maze 概率DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4035 很不错的概率DP题目,因为这题是无向图,所以要对叶节点和非叶节点考虑,然后列出方程后,因为数据很 ...

  3. 2018.09.01 poj3071Football(概率dp+二进制找规律)

    传送门 概率dp简单题. 设f[i][j]表示前i轮j获胜的概率. 如果j,k能够刚好在第i轮相遇,找规律可以发现j,k满足: (j−1)>>(i−1)(j−1)>>(i−1) ...

  4. Discovering Gold LightOJ - 1030[概率dp或者记忆化搜索]

    题目大意:有一个[1,n][1,n][1,n]的数轴,数轴上的每个对应位置上都有金矿,你初始位置是1,然后你每次都会投色子决定你下一步跳到哪里,如果你跳出了nnn,那么你就要重新投.问你跳到nnn的时 ...

  5. 【原创】概率DP总结 by kuangbin

    概率DP主要用于求解期望.概率等题目. 转移方程有时候比较灵活. 一般求概率是正推,求期望是逆推.通过题目可以体会到这点. 首先先推荐几篇参考的论文: <信息学竞赛中概率问题求解初探> & ...

  6. poj 3071 Football(概率dp)

    http://poj.org/problem? id=3071 大致题意:有2^n个足球队分成n组打比赛.给出一个矩阵a[][],a[i][j]表示i队赢得j队的概率.n次比赛的流程像这样France ...

  7. HDU 5001 概率DP || 记忆化搜索

    2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP  測 ...

  8. HDU - 4035 Maze(概率dp)

    题目链接:点击查看 题目大意:给出一个 n 个点的树,初始时位于点 1 ,每个点都会给出一个概率 k[ i ] 和一个概率 e[ i ] ,其代表的意义分别是: k[ i ] :在点 i 有 k[ i ...

  9. SDUT - 2623 The number of steps(概率dp)

    题目链接:点击查看 题目大意:给出一个 n 层的三角形,第一层有 1 个点,第二层有 2 个点,第三层有 3 个点 ... 第 n 层有 n 个点,现在规定从第一层的点向下出发: 如果左下方有点并且右 ...

最新文章

  1. 剑网三缘起,签到领奖活动还能获得白猫,满级玩家5天就得跟宠
  2. java编程好文章链接收集
  3. 怎样理解阻塞非阻塞与同步异步的区别?
  4. 如何获取 SAP Commerce Cloud Spartacus UI 购物车 Cart 的加载状态
  5. Hazelcast入门指南第4部分
  6. C++的extern关键字
  7. macOS的控制台Console.app
  8. Docker 深入理解概念
  9. java搭建线程池框架_JAVA线程池经管及分布式HADOOP调剂框架搭建
  10. 兰州职称计算机中心,【兰州2013年职称计算机考试报名通知】- 环球网校
  11. 矩池云上matplotlib显示中文乱码
  12. c语言创建空顺序表的程序,用C语言编写一个完整的程序,实现顺序表的建立、插入、删除、输出等基本运算。...
  13. es6 Map,Set 和 WeakMap,WeakSet
  14. 40个Android源码学习实例
  15. C++编写COM组件 ATL工程
  16. visio绘图小技巧
  17. 非线性回归算法--学习笔记
  18. 手机idea开发Java_用IntelliJ IDEA开发Android程序
  19. hdmiout 68411升级
  20. 超详细带你入门开发一个超实用的浏览器插件

热门文章

  1. Mysql 授权控制
  2. pyhon简单比较文本相似度的方法
  3. linux下使用yum安装mysql
  4. SugarCRM - 如何让Contact页面的关系字段字段Account变为readonly
  5. window.showModalDialog用法介绍
  6. MySQL 5.1以下如何动态抓取查询日志
  7. 使用Excel 通过 ODBC 连接到 MySQL 数据库
  8. 小程序中页面兼容h5标签的解析
  9. 全面降低windows系统的安全隐患 (五)
  10. Elasticsearch学习笔记-05浏览数据