题意:36张扑克,平分成9摞,两张数字一样的可以拿走,每次随机拿两张,问能拿光的概率。
思路:
直接用搜索,表示出每摞剩余的牌数,然后利用全概率公式即可(P(A) = p(A|b1)*p(b1)+.....+p(A|bn)*p(bn))

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
typedef long long ll;
using namespace std;
int p[10];
int num[9][5];
double dp[5][5][5][5][5][5][5][5][5]; //不同状态时的概率
int vis[5][5][5][5][5][5][5][5][5]; //是否已经搜过
char t1[4],t2[4],t3[4],t4[4]; double dfs(int x1,int x2,int x3,int x4,int x5,int x6,int x7,int x8,int x9)
{
if(vis[x1][x2][x3][x4][x5][x6][x7][x8][x9])
return dp[x1][x2][x3][x4][x5][x6][x7][x8][x9];
vis[x1][x2][x3][x4][x5][x6][x7][x8][x9] = 1;
int top[10] = {x1,x2,x3,x4,x5,x6,x7,x8,x9};
int flag = 0;
for(int i = 0; i < 9; i++) //判断是否已经取完
{
if(top[i])
{
flag = 1;
break;
}
}
if(!flag )
return dp[x1][x2][x3][x4][x5][x6][x7][x8][x9] = 1.0;
int pnum = 0;
double sum = 0.0; //当前情况往下取成功的概率
for(int i = 0; i < 9; i ++)
{
for(int j = i+1; j < 9 && top[i] != 0; j++)
{
if(num[i][top[i]] == num[j][top[j]])
{
top[i]--;
top[j]--;
pnum++; //当前情况下有多少种取法
sum += dfs(top[0],top[1],top[2],top[3],top[4],top[5],top[6],top[7],top[8]);
top[i]++;
top[j]++;
}
}
}
if(sum > 0)
dp[x1][x2][x3][x4][x5][x6][x7][x8][x9] =(sum/(1.0*pnum));
return dp[x1][x2][x3][x4][x5][x6][x7][x8][x9];
} int main()
{
while(scanf("%s%s%s%s",t1,t2,t3,t4) != EOF)
{
num[0][1] = t1[0];
num[0][2] = t2[0];
num[0][3] = t3[0];
num[0][4] = t4[0];
for(int i = 1; i< 9; i++)
{
scanf("%s%s%s%s",t1,t2,t3,t4);
num[i][1] = t1[0];
num[i][2] = t2[0];
num[i][3] = t3[0];
num[i][4] = t4[0];
}
memset(vis,0,sizeof(vis));
memset(dp,0,sizeof(dp));
dfs(4,4,4,4,4,4,4,4,4);
printf("%.6lf\n",dp[4][4][4][4][4][4][4][4][4]);
}
return 0;
}

  

例10-12 *uva1637(概率dp)的更多相关文章

  1. [10.12模拟赛] 老大 (二分/树的直径/树形dp)

    [10.12模拟赛] 老大 题目描述 因为 OB 今年拿下 4 块金牌,学校赞助扩建劳模办公室为劳模办公室群,为了体现 OI 的特色,办公室群被设计成了树形(n 个点 n − 1 条边的无向连通图), ...

  2. 2018.12.12 codeforces 935D. Fafa and Ancient Alphabet(概率dp)

    传送门 概率dp水题. 题意简述:给你数字表的大小和两个数列,数列中为0的数表示不确定,不为0的表示确定的,求第一个数列字典序比第二个数列大的概率. fif_ifi​表示第i ni~ ni n位第一个 ...

  3. 2018.10.13 bzoj4008: [HNOI2015]亚瑟王(概率dp)

    传送门 马上2点考初赛了,心里有点小紧张. 做道概率dp压压惊吧. 话说这题最开始想错了. 最开始的方法是考虑f[i][j]f[i][j]f[i][j]表示第iii轮出牌为jjj的概率. 然后用第ii ...

  4. 【bzoj1778】[Usaco2010 Hol]Dotp 驱逐猪猡 矩阵乘法+概率dp+高斯消元

    题目描述 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44,850)条由两 ...

  5. 20190716NOIP模拟赛T1 礼物(概率dp+状压)

    题目描述 夏川的生日就要到了.作为夏川形式上的男朋友,季堂打算给夏川买一些生 日礼物. 商店里一共有种礼物.夏川每得到一种礼物,就会获得相应喜悦值Wi(每种 礼物的喜悦值不能重复获得). 每次,店员会 ...

  6. [CSP-S模拟测试]:糊涂图(概率DP)

    题目传送门(内部题76) 输入格式 第一行输入三个空格隔开的整数$n,m,s$表示随机加一条边之前的糊涂图的点数,边数,以及起点的编号. 接下来$m$行,每行两个空格隔开的整数$a,b$表示从$a$到 ...

  7. [转]概率DP总结 by kuangbin

    概率类题目一直比较弱,准备把kuangbin大师傅总结的这篇题刷一下! 我把下面的代码换成了自己的代码! 原文地址:http://www.cnblogs.com/kuangbin/archive/20 ...

  8. poj 2096 Collecting Bugs (概率dp 天数期望)

    题目链接 题意: 一个人受雇于某公司要找出某个软件的bugs和subcomponents,这个软件一共有n个bugs和s个subcomponents,每次他都能同时随机发现1个bug和1个subcom ...

  9. CF_229E_Gift_概率DP+组合数学

    CF_229E_Gift_概率DP+组合数学 题目描述: 很久很久以前,一位老人和他的妻子住在蔚蓝的海边.有一天,这位老人前去捕鱼,他捉到了一条活着的金鱼.鱼说:“噢,老渔人!我祈求你放我回到海里,这 ...

随机推荐

  1. django模型——数据库(二)

    模型--数据库(二) 实验简介 模型的一些基本操作,save方法用于把对象写入到数据库,objects是模型的管理器,可以使用它的delete.filter.all.order_by和update等函 ...

  2. nyoj 还是回文

    还是回文 时间限制:2000 ms | 内存限制:65535 KB 难度:3 描述 判断回文串很简单,把字符串变成回文串也不难.现在我们增加点难度,给出一串字符(全部是小写字母),添加或删除一个字符, ...

  3. JAVA_SE基础——50.接口关系下的多态

    接口关系下的多态和继承关系下的多态 相差无几,应该更简单些~ 多态: 父类的引用类型变量指向了子类的对象或者是接口类型的引用类型变量指向了接口实现类 的对象. 实现关系下的多态: 接口  变量  = ...

  4. Python之旅.第四章.模块与包.总结(未完待遇)

    一.模块 模块: 一系列功能的集合体,在python中一个py文件就是一个模块,模块名就是py文件的文件名: 模块的好处: 1.减少重复的代码 2.拿来主义 定义模块: 就是创建一个py文件: 使用模 ...

  5. Centos6.7的在虚拟机virulBox下的lamp平台的搭建

    实验环境: linux:小甲鱼带你学C语言,带你飞的提供的体积比较小的centos6.7和virtualBox mysql,apahce,php是燕十八在Linux基础进阶中提供的安装方式: 结果,安 ...

  6. js判断操作系统windows,ios,android(笔记)

    使用JS判断用户使用的系统是利用浏览器的userAgent. navigator.userAgent:userAgent 获取了浏览器用于 HTTP 请求的用户代理头的值. navigator.pla ...

  7. Linq GroupJoin

    static void Main(string[] args) { List<Person> persons = new List<Person> { }, }, }; Lis ...

  8. vue表单详解——小白速会

    一.基本用法 你可以用 v-model 指令在表单 <input> 及 <textarea> 元素上创建双向数据绑定. 但 v-model 本质上不过是语法糖.它负责监听用户的 ...

  9. CentOS7.4下的 JDK1.8 安装

    一.卸载老的JDK 如果需要卸载OpenJDK,执行以下操作: [root@localhost ~]# rpm -e --nodeps tzdata-java-2014i-1.el7.noarch[r ...

  10. angular2 学习笔记 ( server-side rendering, angular universal, 服务端渲染 )

    更新 : 2018-01-10  大半年过去了依然没有做 server side render 的冲动,但是一直有关注这方便的做法. 今天领悟了一些道理, 这里做个记入. server side re ...