题目链接 https://cn.vjudge.net/problem/UVA-1637

【题意】
36张牌分成9堆,每堆4张,每次可以拿走两堆顶部的牌,但是要求两张牌的点数相同,如果有多种取法那就等概率地随机拿,如果最后拿完所有的牌就算游戏成功,给定初始9堆牌的状态,问你成功的概率

【思路】
用9元组表示牌堆状态,即每堆牌的剩余张数,dp[i]表示状态i对应的成功概率,由全概率公式d[i]为后继状态成功概率的平均值,用记忆化搜索优化

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;const int N=10;char g[N][N][N];
map<vector<int>,double> dp;bool input(){for(int i=0;i<9;++i)for(int j=0;j<4;++j) if(scanf("%s",g[i][j])!=1) return false;return true;
}double dfs(vector<int>& cnt,int num){if(num==0) return 1;if(dp.count(cnt)) return dp[cnt];int tot=0;double sum=0;for(int i=0;i<9;++i){if(cnt[i]==0) continue;for(int j=i+1;j<9;++j){if(cnt[j]==0) continue;if(g[i][cnt[i]-1][0]!=g[j][cnt[j]-1][0]) continue;++tot;--cnt[i],--cnt[j];sum+=dfs(cnt,num-2);++cnt[i],++cnt[j];}}if(tot==0) return dp[cnt]=0;else return dp[cnt]=sum/tot;
}int main(){while(input()){vector<int> cnt(9,4);dp.clear();double ans=dfs(cnt,36);printf("%.6lf\n",ans);}return 0;
}

UVA 1637 - Double Patience(概率DP)相关推荐

  1. UVa 11468 (AC自动机 概率DP) Substring

    将K个模板串构成一个AC自动机,那些能匹配到的单词节点都称之为禁止节点. 然后问题就变成了在Tire树上走L步且不经过禁止节点的概率. 根据全概率公式用记忆化搜索求解. 1 #include < ...

  2. 数学期望和概率DP题目泛做(为了对应AD的课件)

    题1: Uva 1636 Headshot 题目大意: 给出一个000111序列,注意实际上是环状的.问是0出现的概率大,还是当前是0,下一个还是0的概率大. 问题比较简单,注意比较大小: A/C & ...

  3. 概率DP,递推(麻球繁殖,UVA 11021)

    能想到是概率DP,但是定义状态dp[i][j]第i天剩j个麻球.然后麻球数量可能会繁殖到非常多,状态太多数组开不下,然后就不会了. 感觉自己总是轻易就放弃了,还是应该再思考一下,一般遇到这种想到DP但 ...

  4. 小Biu的骰子(概率dp)

    小Biu的骰子(概率dp) 题目描述 从左到右有n个方格,每一块方格上有x[i] 块黄金,最初站在第一块方格上,有一个6个面的均匀骰子, 每一个面上的权值是1−6,每次掷骰子之后按照点数y跳到y步之后 ...

  5. 2018.09.01 poj3071Football(概率dp+二进制找规律)

    传送门 概率dp简单题. 设f[i][j]表示前i轮j获胜的概率. 如果j,k能够刚好在第i轮相遇,找规律可以发现j,k满足: (j−1)>>(i−1)(j−1)>>(i−1) ...

  6. Discovering Gold LightOJ - 1030[概率dp或者记忆化搜索]

    题目大意:有一个[1,n][1,n][1,n]的数轴,数轴上的每个对应位置上都有金矿,你初始位置是1,然后你每次都会投色子决定你下一步跳到哪里,如果你跳出了nnn,那么你就要重新投.问你跳到nnn的时 ...

  7. 【原创】概率DP总结 by kuangbin

    概率DP主要用于求解期望.概率等题目. 转移方程有时候比较灵活. 一般求概率是正推,求期望是逆推.通过题目可以体会到这点. 首先先推荐几篇参考的论文: <信息学竞赛中概率问题求解初探> & ...

  8. poj 3071 Football(概率dp)

    http://poj.org/problem? id=3071 大致题意:有2^n个足球队分成n组打比赛.给出一个矩阵a[][],a[i][j]表示i队赢得j队的概率.n次比赛的流程像这样France ...

  9. HDU 5001 概率DP || 记忆化搜索

    2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP  測 ...

最新文章

  1. 当有键盘时如何在开始编辑时使UITextField向上移动?
  2. 云服务器 ECS 建站教程:创建基于ECS和RDS的WordPress环境
  3. 常用命令之------ln
  4. leetcode —— 654. 最大二叉树
  5. 机器学习实战(十三)推荐系统(协同过滤 Collaborative Filtering)
  6. 浅谈Listener、Filter、Servlet初始化顺序
  7. [QT入门篇]编程基础知识
  8. java软件开发毕业论文_基于java软件毕业论文.doc
  9. Android高仿今日头条/QQ空间手势下拉关闭图片效果
  10. phpstorm如何找回删除的文件
  11. 盘点编程那些英语单词的中文意思
  12. 测试使用bytes.buffer()的单线程与多线程的写效率
  13. 可行性研究报告怎么写?
  14. 音频采集 via Media Foundation
  15. 使用aria2批量下载微博相册
  16. PCB设计之阻抗不连续性,如何解决?
  17. VB6 Treeview的添加节点子节点、Treeview打开、Treeview关闭
  18. 嵌入式linux驱动-LCD液晶屏驱动
  19. 运放单电源供电和双电源供电
  20. 【Python网络爬虫】实战#181024

热门文章

  1. nrf52在未配对的情况下使用白名单广播,指定安卓手机允许连接
  2. X Normal使用方法
  3. 计算机为什么要学16进制,为什么人们通常用十六进制而不是二进制写计算机
  4. 《软件工程与计算》考试复习笔记
  5. OpenCV之灰度空间变换
  6. word2016如何插入题注并交叉引用
  7. 按键精灵模拟键盘批量输入英文大小写
  8. AppiumDesktop学习总结
  9. java上传图片怎么查看,Java上传图片并查看
  10. springmvc下解析模板生成Excel ,用freemarker