单人纸牌

时间限制: 1 Sec  内存限制: 128 MB

题目描述

单人纸牌游戏,共 36 张牌分成 9 叠,每叠 4 张牌面向上。每次,游戏者可以从某两个不同的牌堆最顶上取出两张牌面相同的牌(如黑桃 10 和梅花 10)并且一起拿走。如果最后所有纸牌都被取走,则游戏者就赢了,否则游戏者就输了。
George 很热衷于玩这个游戏,但是一旦有时有多种选择的方法,George 就不知道取哪一种好了,George 会从中随机地选择一种走,例如:顶上的 9 张牌为 KS, KH, KD, 9H,8S, 8D, 7C, 7D,6H,显然有 5 种取法:(KS, KH), (KS, KD), (KH, KD), (8S,8D), (7C, 7D),当然 George 取到每一种取法的概率都是 1/5。
有一次,George 的朋友 Andrew 告诉他,这样做是很愚蠢的,不过 George 不相信,他认为如此玩最后成功的概率是非常大的。请写一个程序帮助 George 证明他的结论:计算按照他的策略,最后胜利的概率。

输入

9 行每行 4 组用空格分开的字串,每个字串两个字符,分别表示牌面和花色,按照从堆底到堆顶的顺序给出。

输出

一行,最后胜利的概率,精确到小数点后 3 位。

样例输入

AS 9S 6C KS
JC QH AC KH
7S QD JD KD
QS TS JS 9H
6D TD AD 8S
QC TH KC 8D
8C 9D TC 7C
9C 7H JH 7D
8H 6S AH 6H

样例输出

0.589
题解:
注意“按照从堆底到堆顶的顺序给出”,所以输入的数应该先反过来DP
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<queue>
#include<stack>
#include<ctime>
#include<vector>
using namespace std;
double f[5][5][5][5][5][5][5][5][5];
int j[10],s[10];
char a[11][5];
int main()
{int i,k;for(i=1; i<=9; i++){char s[15];gets(s+1);a[i][1]=s[10];a[i][2]=s[7];a[i][3]=s[4];a[i][4]=s[1];}f[0][0][0][0][0][0][0][0][0]=1;for(j[1]=0; j[1]<=4; j[1]++){for(j[2]=0; j[2]<=4; j[2]++){for(j[3]=0; j[3]<=4; j[3]++){for(j[4]=0; j[4]<=4; j[4]++){for(j[5]=0; j[5]<=4; j[5]++){for(j[6]=0; j[6]<=4; j[6]++){for(j[7]=0; j[7]<=4; j[7]++){for(j[8]=0; j[8]<=4; j[8]++){for(j[9]=0; j[9]<=4; j[9]++){if(f[j[1]][j[2]][j[3]][j[4]][j[5]][j[6]][j[7]][j[8]][j[9]]!=0){double cnt=0;for(i=1; i<=9; i++)for(k=i+1; k<=9; k++)if(j[i]+1<=4&&j[k]+1<=4&&a[i][j[i]+1]==a[k][j[k]+1])cnt++;if(cnt==0)continue;for(i=1; i<=9; i++){for(k=i+1; k<=9; k++){if(j[i]+1<=4&&j[k]+1<=4&&a[i][j[i]+1]==a[k][j[k]+1]){s[i]++;s[k]++;f[j[1]+s[1]][j[2]+s[2]][j[3]+s[3]][j[4]+s[4]][j[5]+s[5]][j[6]+s[6]][j[7]+s[7]][j[8]+s[8]][j[9]+s[9]]+=f[j[1]][j[2]][j[3]][j[4]][j[5]][j[6]][j[7]][j[8]][j[9]]/cnt;s[i]--;s[k]--;}}}}}}}}}}}}}printf("%.3lf",f[4][4][4][4][4][4][4][4][4]);return 0;
}

转载于:https://www.cnblogs.com/huangdalaofighting/p/7059049.html

单人纸牌_NOI导刊2011提高(04)相关推荐

  1. P1801 黑匣子_NOI导刊2010提高(06)

    P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...

  2. P1799 数列_NOI导刊2010提高(06)

    P1799 数列_NOI导刊2010提高(06) f[i][j]表示前i个数删去j个数得到的最大价值. if(i-j==x) f[i][j]=max(f[i][j],f[i-1][j]+1); els ...

  3. 方程的解_NOI导刊2010提高(01) 组合数

    题目描述 佳佳碰到了一个难题,请你来帮忙解决. 对于不定方程a1+a2+-+ak-1+ak=g(x),其中k≥2且k∈N,x是正整数,g(x)=x^x mod 1000(即x^x除以1000的余数), ...

  4. 洛谷 P1795 无穷的序列_NOI导刊2010提高(05)

    P1795 无穷的序列_NOI导刊2010提高(05) 题目描述 有一个无穷序列如下: 110100100010000100000- 请你找出这个无穷序列中指定位置上的数字 输入输出格式 输入格式: ...

  5. 洛谷P1807 最长路_NOI导刊2010提高(07) 求有向无环图的 最长路 图论

    洛谷P1807 最长路_NOI导刊2010提高(07) 图论 求有向无环图的 最长路 首先阐明一点 最长路dijkstra 是不能做 (当然我是不会做的,不过我貌似看到过网上的dalao有用dijst ...

  6. P1950 长方形_NOI导刊2009提高(2)[单调栈][贡献法]

    P1950 长方形_NOI导刊2009提高(2) 题意:给你\(n\times m\)的矩形,求没有*的子矩形数量.\(1\leq n,m\leq 1000\). 数据比较弱的题目是luoguP119 ...

  7. 洛谷 P1796 汤姆斯的天堂梦_NOI导刊2010提高(05)

    P1796 汤姆斯的天堂梦_NOI导刊2010提高(05) 题目描述 汤姆斯生活在一个等级为0的星球上.那里的环境极其恶劣,每天12小时的工作和成堆的垃圾让人忍无可忍.他向往着等级为N的星球上天堂般的 ...

  8. 洛谷——P1775 古代人的难题_NOI导刊2010提高(02) P1936 水晶灯火灵(斐波那契数列)...

    P1775 古代人的难题_NOI导刊2010提高(02) P1936 水晶灯火灵 斐波那契数列 1.x,y∈[1-k],且x,y,k∈Z 2.(x^2-xy-y^2)^2=1 给你一个整数k,求一组满 ...

  9. 洛谷—— P1775 古代人的难题_NOI导刊2010提高(02)

    P1775 古代人的难题_NOI导刊2010提高(02) 题目描述 门打开了,里面果然是个很大的厅堂.但可惜厅堂内除了中央的一张羊皮纸和一支精致的石笔,周围几具骷髅外什么也没有.难道这就是王室的遗产? ...

最新文章

  1. 参加第一届宇宙 JavaScript 大会是怎样的体验
  2. 【剑指offer-Java版】06重建二叉树
  3. DOM_06之定时器、事件、cookie
  4. 3-Arm CPU Specific Build Macros
  5. nginx: [error] invalid PID number问题处理
  6. 无线射频识别技术开发与应用学习视频
  7. mysql聚集索引与非聚集索引
  8. 一文看懂,Scrapy 底层逻辑是如此的简单
  9. 无线调试神器:无线WiFi串口透传模块使用
  10. php 字符串编码方式转换,php字符串编码转换的常用几种方法_PHP教程
  11. springboot毕设项目基于的医院就医平台m11a1(java+VUE+Mybatis+Maven+Mysql)
  12. 超全整理100个 Pandas 函数,建议收藏!
  13. python3《机器学习实战系列》学习笔记----3.2 决策树实战
  14. ssh端口转发(隧道技术)
  15. android官方自带下拉刷新功能
  16. RBF神经网络基本思想
  17. 不要盲目跟风:中小企业运营自媒体需三思而后行
  18. 钟南山团队携手腾讯研发新冠重症AI预测 成果登上Nature子刊
  19. codevs 3061 质子撞击炮②
  20. 微软认证70-541,70-542等考试试题(80%以上的题目是一样的)

热门文章

  1. head中meta name=viewport content=width=device-width,initical-scale=1的作用
  2. Oracle 哈希连接原理
  3. Java1.5语言新特性简单总结
  4. c++驱动键鼠源码,C++ 驱动打印机源码
  5. PHP程序员helloworld,基于yaf的Hello world示例
  6. 设计模式复习-中介者模式
  7. 【Google Play】正式版上架流程 ( 创建版本 | 设置国家地区 | 发布正式版 )
  8. 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 五 )
  9. 【Android 安全】DEX 加密 ( Application 替换 | 分析 Activity 组件中获取的 Application | ActivityThread | LoadedApk )
  10. 【Android 性能优化】布局渲染优化 ( 过渡绘制 | 自定义控件过渡绘制 | 布局文件层次深 | GPU 过渡绘制调试工具 | 背景过度绘制 )