单人纸牌

时间限制: 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[][][][][][][][][];
int j[],s[];
char a[][];
int main()
{
int i,k;
for(i=; i<=; i++)
{
char s[];
gets(s+);
a[i][]=s[];
a[i][]=s[];
a[i][]=s[];
a[i][]=s[];
}
f[][][][][][][][][]=;
for(j[]=; j[]<=; j[]++)
{
for(j[]=; j[]<=; j[]++)
{
for(j[]=; j[]<=; j[]++)
{
for(j[]=; j[]<=; j[]++)
{
for(j[]=; j[]<=; j[]++)
{
for(j[]=; j[]<=; j[]++)
{
for(j[]=; j[]<=; j[]++)
{
for(j[]=; j[]<=; j[]++)
{
for(j[]=; j[]<=; j[]++)
{
if(f[j[]][j[]][j[]][j[]][j[]][j[]][j[]][j[]][j[]]!=)
{
double cnt=;
for(i=; i<=; i++)
for(k=i+; k<=; k++)
if(j[i]+<=&&j[k]+<=&&a[i][j[i]+]==a[k][j[k]+])cnt++;
if(cnt==)continue;
for(i=; i<=; i++)
{
for(k=i+; k<=; k++)
{
if(j[i]+<=&&j[k]+<=&&a[i][j[i]+]==a[k][j[k]+])
{
s[i]++;s[k]++;
f[j[]+s[]][j[]+s[]][j[]+s[]][j[]+s[]][j[]+s[]][j[]+s[]][j[]+s[]][j[]+s[]][j[]+s[]]+=f[j[]][j[]][j[]][j[]][j[]][j[]][j[]][j[]][j[]]/cnt;
s[i]--;s[k]--;
}
}
}
}
}
}
}
}
}
}
}
}
}
printf("%.3lf",f[][][][][][][][][]);
return ;
}

单人纸牌_NOI导刊2011提高(04)的更多相关文章

  1. P1837 单人纸牌_NOI导刊2011提高(04)

    题目描述 单人纸牌游戏,共36张牌分成9叠,每叠4张牌面向上.每次,游戏者可以从某两个不同的牌堆最顶上取出两张牌面相同的牌(如黑桃10和梅花10)并且一起拿走.如果最后所有纸牌都被取走,则游戏者就赢了 ...

  2. P1836 【数页码_NOI导刊2011提高(04)】

    P1836 数页码_NOI导刊2011提高(04) 题目描述 一本书的页码是从1—n编号的连续整数:1,2,3,…,n.请你求出全部页码中所有单个数字的和,例如第123页,它的和就是1+2+3=6. ...

  3. 贪心—— P1809 过河问题_NOI导刊2011提高(01)

    洛谷——P1809 过河问题_NOI导刊2011提高(01) 题目描述 有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸.而东岸边有一条小船. 船太小了,一次只能 ...

  4. 洛谷 P1808 单词分类_NOI导刊2011提高(01)

    P1808 单词分类_NOI导刊2011提高(01) 题目描述 Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类. 两个单词可以分为一类当且仅当 ...

  5. 洛谷P1808 单词分类_NOI导刊2011提高(01) 字符串排序

    洛谷P1808 单词分类_NOI导刊2011提高(01) 题目描述 Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类. 两个单词可以分为一类当且 ...

  6. P1835 素数密度_NOI导刊2011提高(04)

    题目描述 给定区间[L,R](L≤R≤2147483647,R-L≤1000000),请计算区间中素数的个数. 输入输出格式 输入格式: 两个数L和R. 输出格式: 一行,区间中素数的个数. 输入输出 ...

  7. 素数密度_NOI导刊2011提高(04)

    题目描述 给定区间[L, R](L <= R <= 2147483647,R-L <= 1000000),请计算区间中素数的个数. 输入 两个数 L 和 R. 输出 一行,区间中素数 ...

  8. [luoguP1835] 素数密度_NOI导刊2011提高(04)(素数筛)

    传送门 数据辣么大,怎么搞?(L≤R≤2147483647) 注意到R-L≤1000000 所以可以直接筛R-L区间内的数, 但是需要用已知的小的素数筛, R-L区间内的大部分数肯定能用较小的素数筛去 ...

  9. 洛谷P1809 过河问题_NOI导刊2011提高(01)

    To 洛谷.1809 过河问题 题目描述 有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸.而东岸边有一条小船. 船太小了,一次只能乘坐两人.每个人都有一个渡河时 ...

随机推荐

  1. MongoDB大数据高并发读写性能测试报告

    服务器大小: 单节点部署,磁盘1T,内存128G 并发导入规模: 1,多线程并发导入csv文件 2,csv文件分1万.10万.100万.200万行记录4种大小 3,每个csv对应一个collectio ...

  2. iframe框架的应用

    同学接私活,我写几个页面. 后台系统,点击侧栏菜单后,右边div的要显示对应的内容.就是说,没选一下左边的菜单,右边的内容都要变化. 这次首先尝试了一下Oldfasional办法--iframe框架. ...

  3. (5)微信二次开发 之 XML格式数据解析

    1.首先理解一下html html的全名是:HyperText Transfer markup language 超级文本标记语言,html本质上是一门标记(符合)语言,在html里,这些标记是事先定 ...

  4. 利用反射来实现获取成员的指定特性(Attribute)信息

    在开发过程中,我们经常需要自定义一些特性,来辅助我们完成对对象或者枚举进行管理.我们需要知道如何获取对象使用的特性信息. 以下举个学习用的例子. 我们自定义一个特性类,这个特性设置在一个数据段内是否执 ...

  5. [笔记]我的Linux入门之路 - 03.Java环境搭建

    其实ubuntu是自带一个叫openJDK的东西的,是谷歌看Oracle不爽而搞的.不过呢...总感觉不太习惯,况且我既然都来Linux了,总是想折腾一把的. 首先先检查下有没有安装java.终端输入 ...

  6. MySQL5.5多实例编译安装——多配置文件

    一.什么是MySQL多实例?MySQL多实例简单的说就是在一台服务器上安装一套MySQL程序,通过不同的端口对外提供访问,多实例不仅节省物理主机成本,还有效提升了单台物理主机的CPU.磁盘I/O使用效 ...

  7. [转]JAVA自动装箱和拆箱

    http://www.cnblogs.com/dolphin0520/p/3780005.html 1.Java数据类型 装箱和拆箱之前,我们先来了解一下Java的基本数据类型. 在Java中,数据类 ...

  8. Java UDP Socket

    本文转载地址:          Java学习路上的收获:http://blog.csdn.net/qinpeng100423/article/details/8980423 一. UDP协议定义 U ...

  9. Thread in Java

    References: [1]. http://www.javaworld.com/article/2074481/java-concurrency/java-101--understanding-j ...

  10. 计蒜客蓝桥杯模拟赛五J. 程序设计:放置守卫

    在一张 n 行 m 列的方格地图上放置一些守卫,每个守卫能守护上.左.右三个方向上相邻的方格和自己所在的方格.如下图,红色的方格放置守卫,绿色的方格为该守卫守护的区域. 现在要求在地图上放置若干个守卫 ...