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++ std::stack
std::stack template <class T, class Container = deque<T> > class stack; LIFO stack Stack ...
- Angular2中的Service并不是单例模式
2015年做了一个使用angularjs 1框架的项目,2016年伊始公司的项目转为使用Angular2框架. 在开发过程中发现了一个坑,这个坑就是在Angular JS 1.x中的Service是单 ...
- iOS开发-OC语言 (七)继承、多态、类别
继承.多态.类别 学习目标 1.继承的含义 2.父类子类的别称 3.字段和消息的继承 4.重写和重写消息的调用 5.多态 6.类别(Category) ======================== ...
- angular1 实现页面切换及tag页面
tag页面实现<div class="b_gray" style="padding-left:24px;border-bottom:1px solid #ccc&q ...
- 【angular】angular实现简单的tab切换
html: <div class="list-group" ng-repeat="tab in menuList"> <a href=&quo ...
- Bucket Sort - leetcode [桶排序]
桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里.每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序).桶排序是鸽巢排序 ...
- JSON跟JSONP的区别以及实战
前言 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socke ...
- 洛谷-神奇的幻方-NOIP2015提高组复赛
题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,--,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. ...
- [读书笔记]xampp mysql启动失败解析(win7)
1. [mysql] MySQL Service detected with wrong path [mysql] Change XAMPP MySQL and Control Panel s ...
- C#数字类型及运算符