Black Jack
Black Jack
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5602
记忆化搜索
用dp[0][i][j]记录当player为i,banker为j时player赢的概率;dp[1][i][j]记录当player为i,banker为j时banker输或平局的概率。
显然,player当前的决策只有两种:1.continue继续拿牌;2.turn to banker让庄家拿牌.
故dp[0][i][j]=max(继续拿牌玩家赢的概率,让庄家拿牌庄家输或平局的概率);
而继续拿牌玩家赢的概率=1/13*dp[0][i+1...i+9][j]+4/13*dp[0][i+10][j],
让庄家拿牌庄家输或平局的概率=1/13*dp[1][i][j+1...j+9]+4/13*dp[1][i][j+10].
值得注意的是,玩家和庄家拿牌的策略有所不同:庄家只要当前牌数比玩家大或相等,庄家即可不再拿牌.
不说了,要落泪了,回去补复变了。
代码如下:
#include<cstdio>
#include<cstring>
#define Max(x,y) (x>y?x:y)
using namespace std;
int T,play,bank;
char s[];
double dp[][][],flag;//0.player win's gay 1.banker lose's gay
bool mark[][][];
int hs(char c){
if(c=='A')return ;
else if(''<=c&&c<='')return c-'';
return ;
}
void init(){
scanf("%s",s);
play=hs(s[])+hs(s[]);
bank=hs(s[])+hs(s[]);
}
double dfsForBank(int p,int b){
if(b>)return 1.0;
if(b>=p)return 0.0;
if(mark[][p][b])return dp[][p][b];
mark[][p][b]=;
for(int i=;i<=;++i){
if(i!=)dp[][p][b]+=1.0/*dfsForBank(p,b+i);
else dp[][p][b]+=4.0/*dfsForBank(p,b+i);
}
return dp[][p][b];
}
double dfsForPlay(int p,int b){
if(p>)return 0.0;
if(mark[][p][b])return dp[][p][b];
mark[][p][b]=;
double turnOver=dfsForBank(p,b);//turn to banker
for(int i=;i<=;++i){//continue
if(i!=)dp[][p][b]+=1.0/*dfsForPlay(p+i,b);
else dp[][p][b]+=4.0/*dfsForPlay(p+i,b);
}
dp[][p][b]=Max(dp[][p][b],turnOver);
return dp[][p][b];
}
int main(void){
scanf("%d",&T);
while(T--){
init();
flag=dfsForPlay(play,bank);
if(flag>0.5)printf("YES\n");
else printf("NO\n");
}
}
Black Jack的更多相关文章
- 解决:编译CM14.1 提示Jack “Out of memory error”错误
Android 7.1编译到33%时出现JDK内存溢出的错误: Out of memory error (version f95d7bdecfceb327f9d201a1348397ed8a84384 ...
- 解决:ERROR: Cannot launch Jack server
问题重现: Install: /home/dinphy/sm/out/target/product/ido/system/lib/libdl.so java -Xmx3500m -jar /home/ ...
- jack报错
[ 29% 17593/59326] Ensure Jack server is installed and startedFAILED: /bin/bash -c "(prebuilts/ ...
- 耳机jack构造及在应用时可能出现的问题
目前市场上耳机分为4环耳机(图1所示,iphone型)和3环耳机(图2所示).4环耳机称为headset,3环耳机称为headphone,两者之间的区别就是4环耳机比3环耳机多个micphone.而J ...
- poj1127 Jack Straws(线段相交+并查集)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Jack Straws Time Limit: 1000MS Memory L ...
- 【屌丝程序的口才逆袭演讲稿50篇】第十篇:程序猿们请看看外面的世界吧【张振华.Jack】
演讲稿主题:<程序猿们请看看外面的世界吧> --作者:张振华Jack 大家都知道我是一个程序猿.几年下来认识了最典型的三个程序猿. ...
- 1840: Jack Straws
1840: Jack Straws 时间限制(普通/Java):1000MS/10000MS 内存限制:65536KByte 总提交: 168 测试通过:129 描述 I ...
- com.android.jack.CommandLine: Internal compiler error
Android studio编译的时候出现错误: SEVERE: com.android.jack.CommandLine: Internal compiler error Error:Executi ...
- HP Jack介绍
转载:https://www.cnblogs.com/Peter-Chen/p/3999212.html 目前市场上耳机分为4环耳机(图1所示,iphone型)和3环耳机(图2所示).4环耳机称为he ...
随机推荐
- 正经学C#_表达式与其运算符[算术运算符]:《c#入门经典》
表达式:正如字面意义,它是通过算术运算符来进行运算的数学公式.表达式的意义我们都是很明白的,大白话就是一个公式嘛.不是很难懂. 表达式不是一个单独的存在,必然有操作数或者操作符的.在c#中有操作符有很 ...
- 启用div作为编辑器 添加contentEditalbe属性
1.自从HTML5中新引入了contentEditalbe属性以后,div就与textarea一样,可以作为最常用的编辑器使用. 1.启用div作为编辑器 让div进入编辑状态很简单,只需要: 复制代 ...
- 文档在线预览开源实现方案一:OpenOffice + SwfTools + FlexPaper
在文档在线预览方面,项目组之前使用的是Microsoft office web apps, 由于该方案需要按照微软License付费,项目经理要我预研一个文档在线预览的开源实现方案.仔细钻入该需求发现 ...
- 定位(position)
position :属性规定元素的定位类型 语法: position : static | absolute | fixed | relative JavaScript语法:object.style. ...
- Python网络编程学习_Day10
一.进程与线程 1.区别 进程:一个程序要运行时所需要的所有资源的集合,进程是资源的集合. 一个进程至少需要一个线程,这个线程称为主线程 一个进程里面可以有多个线程 两个进程之间的数据是完全独立,不能 ...
- Python基础知识学习_Day6
一.time&datetime模块 常用选项如下: import time print(time.asctime()) #返回时间格式 print(time.localtime())#返回本地 ...
- iOS正则表达
问题引入 1.要验证用户输入的密码长度是否满足6~18位的长度 ^.{6,18}$ 2.固定电话都是0区号-八位数字的格式,那么正则表达式的匹配如下 ^0\\d{2}\-?\\d{8}$ 3.对于密码 ...
- Android 不能返回 parent Activity 的问题
使用 ActionBar,开启返回按钮: 在 Activity 的 onCreate 中添加下面代码 getSupportActionBar().setDisplayHomeAsUpEnabled(t ...
- Qt 外观之一 ——Qt Style Sheet
Qt Style Sheet 目录 使用 对于应用程序 创建自定义控件 QSS语法 一般选择器(selector) 伪选择器 解决冲突 使用specificity Namespace冲突 级联效应 设 ...
- java 随机生成11位 组合
public static String generate8RateUuid() { String[] chars = new String[] { "a", & ...