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的更多相关文章

  1. 解决:编译CM14.1 提示Jack “Out of memory error”错误

    Android 7.1编译到33%时出现JDK内存溢出的错误: Out of memory error (version f95d7bdecfceb327f9d201a1348397ed8a84384 ...

  2. 解决:ERROR: Cannot launch Jack server

    问题重现: Install: /home/dinphy/sm/out/target/product/ido/system/lib/libdl.so java -Xmx3500m -jar /home/ ...

  3. jack报错

    [ 29% 17593/59326] Ensure Jack server is installed and startedFAILED: /bin/bash -c "(prebuilts/ ...

  4. 耳机jack构造及在应用时可能出现的问题

    目前市场上耳机分为4环耳机(图1所示,iphone型)和3环耳机(图2所示).4环耳机称为headset,3环耳机称为headphone,两者之间的区别就是4环耳机比3环耳机多个micphone.而J ...

  5. poj1127 Jack Straws(线段相交+并查集)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Jack Straws Time Limit: 1000MS   Memory L ...

  6. 【屌丝程序的口才逆袭演讲稿50篇】第十篇:程序猿们请看看外面的世界吧【张振华.Jack】

    演讲稿主题:<程序猿们请看看外面的世界吧>                      --作者:张振华Jack     大家都知道我是一个程序猿.几年下来认识了最典型的三个程序猿.     ...

  7. 1840: Jack Straws

    1840: Jack Straws 时间限制(普通/Java):1000MS/10000MS     内存限制:65536KByte 总提交: 168            测试通过:129 描述 I ...

  8. com.android.jack.CommandLine: Internal compiler error

    Android studio编译的时候出现错误: SEVERE: com.android.jack.CommandLine: Internal compiler error Error:Executi ...

  9. HP Jack介绍

    转载:https://www.cnblogs.com/Peter-Chen/p/3999212.html 目前市场上耳机分为4环耳机(图1所示,iphone型)和3环耳机(图2所示).4环耳机称为he ...

随机推荐

  1. DLoopDetector回环检测算法

    词袋模型是一种文本表征方法,它应用到计算机视觉领域就称之为BoF(bag of features),通过BoF可以把一张图片表示成一个向量.DBoW2是一个视觉词袋库,它提供了生成和使用词典的接口,但 ...

  2. C#开发学习——存储过程

    举个例子: 带输入参数的存储过程计算班级中英语和数学不及格的人数      if(exists(select * from sys.objects where name='usp_GetFailCou ...

  3. 关于react-native遇到Can't find variable: TouchableHighlight

    当你遇到这样的问题时,是由于你没有import中添加TouchableHighlight import { AppRegistry, StyleSheet, Text, View, PixelRati ...

  4. 微信js-sdk调用

    之前在做微信的时候,在微信支付还有调起微信扫一扫的时候,用过js-sdk.最近,被几个做前端的同学问到了具体的流程,想想,还是写下来好点.     微信js-sdk,是微信提供给网页开发设计者使用的, ...

  5. Python中is和==的区别的

    在python中,is检查两个对象是否是同一个对象,而==检查他们是否相等. str1 = 'yangshl' str2 = 'yang' + 'shl' print('str1 == str2:', ...

  6. css1

    背景属性:background;background-color;background-image;background-repeat;(背景是否重复,有repeat-x 横式重复,repeat-y竖 ...

  7. win7安装iis及web配置教程

    下面iis教程只适用win7或win8系统的服务器配置,如果您使用的是xp系统或win2003系统请看:xp或2003安装iis及web配置教程 .注:新手如果嫌iis安装配置麻烦建议下载PageAd ...

  8. 超实用 JS 代码段笔记(一)

    序1:30段简单代码段(有删减) 1 . 区分 IE 和 非 IE 浏览器 if(!+[1,]){ console.log('ie浏览器'); }else{ console.log('非ie浏览器') ...

  9. 怎么 得到 DBGrid选中行的数据

    转自:https://zhidao.baidu.com/question/1694035814426308148.html 一般是你鼠标点到哪一行,其DataSet的指针就指到了什么位置你可以直接通过 ...

  10. jqery总结