解题思路:

路:一开始不理解假定A和B都足够聪明,采取让自己获胜概率尽量高的策略,你的任务是计算出A获胜的概率。

其实就是说在任意一种方式下都是取得胜利的最大概率,所以要从所有可能的情况(1~6行,从左or从右)里取一个最大的

那么直接去dfs枚举即可,注意这里涉及到了一点博弈的知识。

当状态为全0的时候是必败态,在这个状态下获胜概率为0

当前状态所能到达的下一个状态的最大获胜概率是当前状态对应的这个人的最小获胜概率,所以累加起来然后用1减掉即是我们要求的当前状态的最大获胜概率(可以理解为AB两个人一轮一轮的射击,我们现在要算A这个人最大获胜概率,那么必然等于1-下一个状态(此时为B)最大获胜概率)

---------------------

作者:acm_cxq

来源:CSDN

原文:https://blog.csdn.net/acm_cxq/article/details/52282705

注意事项:

附上找到的解析供参考

参考代码:

#include

#include

#include

#include

#include

#include

using namespace std;

int n;

double dp[7][7][7][7][7][7];

double dfs(int *h)///从第一列到最后一列分别有多少个积木

{

if(dp[h[0]][h[1]][h[2]][h[3]][h[4]][h[5]]!=-1) return dp[h[0]][h[1]][h[2]][h[3]][h[4]][h[5]];

dp[h[0]][h[1]][h[2]][h[3]][h[4]][h[5]]=0.0;

for(int i=1; i<=6; i++) ///往第i行开枪

{

double ans=0;

int num=0;

for(int j=0; j<6; j++) ///枚举列

if(h[j]>=i)

num++;

if(!num) break;

for(int j=1; j<=3; j++)

{

int hh[6];

for(int k=0;k<6;k++) hh[k]=h[k];

num=0;

for(int k=0; k

{

if(hh[k]>=i)

{

num++;

hh[k]--;

}

if(num==j) break;

}

ans+=1-dfs(hh);

}

dp[h[0]][h[1]][h[2]][h[3]][h[4]][h[5]]=max(dp[h[0]][h[1]][h[2]][h[3]][h[4]][h[5]],ans/3.0);

ans=0;

for(int j=1; j<=3; j++)

{

int hh[6];

for(int k=0;k<6;k++) hh[k]=h[k];

num=0;

for(int k=5; k>=0; k--)

{

if(h[k]>=i)

{

num++;

hh[k]--;

}

if(num==j) break;

}

ans+=1-dfs(hh);

}

dp[h[0]][h[1]][h[2]][h[3]][h[4]][h[5]]=max(dp[h[0]][h[1]][h[2]][h[3]][h[4]][h[5]],ans/3.0);

}

return dp[h[0]][h[1]][h[2]][h[3]][h[4]][h[5]];

}

int main()

{

int h[6];

while(~scanf("%d",&n)&&n)

{

memset(h,0,sizeof(h));

for(int i=0; i

scanf("%d",&h[i]);

for(int i=0; i<=6; i++)

for(int j=0; j<=6; j++)

for(int k=0; k<=6; k++)

for(int l=0; l<=6; l++)

for(int q=0; q<=6; q++)

for(int w=0; w<=6; w++)

dp[i][j][k][l][q][w]=-1;

printf("%.6lf\n",dfs(h));

}

return 0;

}

部分转载:https://blog.csdn.net/acm_cxq/article/details/52282705

射击游戏c语言源码,射击游戏 (C++代码)相关推荐

  1. 约瑟夫生死游戏c 语言,[源码和文档分享]使用C++实现的约瑟夫生死游戏

    一.项目简介 约瑟夫生者死者游戏的大意是:30个旅客同乘一条船,因为严重超载,加上风高浪大危险万分:因此船长告诉乘客,只有将全船一半的旅客投入海中,其余人才能幸免于难.无奈,大家只得统一这种方法,并议 ...

  2. c语言小游戏 精简_一个简易的贪吃蛇小游戏C语言源码

    /* *程序名称:贪吃蛇v2.1 *程序描述:一个简易的贪吃蛇小游戏 *版本信息:v2.1 *v1.1版本更新:1:加入菜单选择项 *v1.2版本更新:1:修复菜单选择bug *v1.3班本更新:1: ...

  3. C++小游戏笔记——射击小行星(附源码)

    C++小游戏笔记--射击小行星(附源码) 游戏展示图 一.飞船 1.飞船的绘制 2.飞船的角度 二.小行星 1.小行星的绘制 2."凹凸不平"效果的形成 3.小行星的分裂 三.子弹 ...

  4. 学生HTML个人网页作业作品(游戏网站全套源码)

    学生个人网页制作html模板,一个简单的HTML网页,这是我大学的一个期末作业,照片代码全都有,先打开index.html.代码如果不会复制粘贴的可以私信我.学生HTML个人网页作业作品(游戏网站全套 ...

  5. 游戏陪玩系统源码中聊天室内礼物系统的实现

    游戏陪玩系统源码中聊天室的礼物系统,第一步用户看到的无外乎都是礼物的列表界面 纵观主流聊天室的礼物列表应该都是使用UICollectionView实现的,所以我也不例外,下面就是各种撸代码.效果如下 ...

  6. 如何提高游戏陪玩app源码的代码可读性?

    1.Why 对一线开发人员来说,每天工作内容大多是在已有游戏陪玩app源码的基础上继续堆代码.当游戏陪玩app源码实在堆不动时就需要寻找收益来重构代码.既然我们的大多数时间都花在坐在显示器前读写代码这 ...

  7. unity3d游戏2d横版射击游戏完整项目源码分享

    unity3d游戏2d横版射击游戏完整项目源码分享 免费下载地址: 链接:https://pan.baidu.com/s/1YwhEy7DeKIHFU8pBLdJFPg 提取码:3wnx 复制这段内容 ...

  8. c语言小游戏跳一跳代码及注释,如何获得微信小游戏跳一跳源码以及源代码组合包括哪些...

    原标题:如何获得微信小游戏跳一跳源码以及源代码组合包括哪些 很多小游戏都是由源代码编写而成的,那大家知道源代码组合包括哪些吗?手机游戏源代码怎么使用的呢?还有,如何获得微信小游戏跳一跳源码?下面就由奇 ...

  9. C语言小游戏大全,C语言贪吃蛇小游戏(附源码)

    一.C语言小游戏大全,C语言贪吃蛇小游戏(附源码) 贪吃蛇小游戏源码和更多C语言课设项目小游戏源码免 费 下 载 链 接 如下: c语言项目课设小游戏源码资料压缩包.zip-C文档类资源-CSDN下载 ...

最新文章

  1. linux中pthread_kill函数详解
  2. java中方法不调用会执行_java[新手]类里的方法没有调用为什么实现了?
  3. java 监控 收集资料2(收集中)
  4. 图表点编辑数据无反应_提升论文硬核实力之“如何避免图表绘制的雷区”
  5. java的基本结构_【Java基础】基本程序设计结构
  6. PHP学习之六:预定义常量
  7. [GCN] 图卷积知识梳理 -持续更新
  8. Centos 7 Puppet之foreman介绍安装测试
  9. 构建Python软件大厦系列
  10. C++ Primer Plus 6 第一章
  11. cc2530设计性实验代码四
  12. android苹果耳机音量调节,安卓线控耳机怎么调节音量大小?
  13. format的几种用法
  14. 【积水成渊-逐步定制自己的Emacs神器】2:基本的定制Emacs
  15. MSI Z390主板双SSD+HDD,win10系统下安装Ubuntu18.04LTS双系统总结
  16. 独立同分布(I.I.D.)是什么?(转载)
  17. cif和cip的区别_CIF与CIP价的区别?CIP价怎么算的?...
  18. 嵌入式系统基础知识总结
  19. windows7英文版,变为中文版
  20. 实体零售关店潮之下 这个美国品牌偏不信邪

热门文章

  1. Nginx介绍和使用
  2. 史上最全的标题党标题
  3. ORACLE中CLOB介绍及使用
  4. 1005错误解决办法
  5. ZYNQ学习笔记——高速ADDA实验
  6. nginx正向代理配置
  7. rbf神经网络自适应控制matlab仿真,机械系统RBF神经网络控制:设计、分析及Matlab仿真(英文)...
  8. 【数据结构】直接插入排序以及时间复杂度的分析
  9. Linux下给python3安装库
  10. Git修改文件大小写的修改