状态压缩,记忆化搜索。

用一个5进制数来表示每堆排到了哪一个位置。和2进制是一样的,不过不能用位运算。

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 2000000+10; double dp[maxn];
bool vis[maxn];
char s[10][10][5];
int v,v2; double dfs(int n) {
v++;
if(n==0) return 1.0;
if(vis[n]) {v2++; return dp[n];}
vis[n]=1; int tmp=n,cnt=0;
int a[10];
for(int i=1;i<=9;i++) {
a[i]=tmp%5;
tmp/=5;
}
for(int i=1;i<9;i++)
for(int j=i+1;j<=9;j++)
if(a[i] && a[j] && s[i][a[i]][0]==s[j][a[j]][0]) {
tmp=0;
for(int k=9;k>=1;k--) {
tmp*=5;
if(k==i || k==j) tmp+=a[k]-1;
else tmp+=a[k];
}
dp[n]+=dfs(tmp);
cnt++;
}
if(cnt) dp[n]=dp[n]/(1.0*cnt);
return dp[n];
} int main() {
while(scanf("%s",s[1][1])==1) {
for(int i=2;i<=4;i++) scanf("%s",s[1][i]);
for(int i=2;i<=9;i++)
for(int j=1;j<=4;j++)
scanf("%s",s[i][j]);
memset(dp,0,sizeof(dp));
memset(vis,0,sizeof(vis));
dfs(1953124);
printf("%.6lf\n",dfs(1953124));
}
return 0;
}

uva1637Double Patience的更多相关文章

  1. UVA1637Double Patience(概率 + 记忆化搜索)

    训练指南P327 题意:36张牌分成9堆, 每堆4张牌.每次拿走某两堆顶部的牌,但需要点数相同.如果出现多种拿法则等概率的随机拿. 如果最后拿完所有的牌则游戏成功,求成功的概率. 开个9维数组表示每一 ...

  2. POJ2794 Double Patience[离散概率 状压DP]

    Double Patience Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 694   Accepted: 368 Cas ...

  3. UVA127- "Accordian" Patience(模拟链表)

    "Accordian" Patience You are to simulate the playing of games of ``Accordian'' patience, t ...

  4. [刷题]算法竞赛入门经典(第2版) 6-9/UVa127 - "Accordian" Patience

    题意:52张牌排一行,一旦出现任何一张牌与它左边的第一张或第三张"匹配",即花色或点数相同,则须立即将其移动到那张牌上面,将其覆盖.能执行以上移动的只有压在最上面的牌.直到最后没有 ...

  5. UVA127-"Accordian" Patience(模拟)

    Problem UVA127-"Accordian" Patience Accept:3260  Submit:16060 Time Limit: 3000 mSec Proble ...

  6. 文本diff算法Patience Diff

    一般在使用 Myers diff算法及其变体时, 对于下面这种例子工作不是很好, 让变化不易阅读, 并且容易导致合并冲突 void Chunk_copy(Chunk *src, size_t src_ ...

  7. ACM学习历程——UVA 127 "Accordian" Patience(栈;模拟)

    Description  ``Accordian'' Patience  You are to simulate the playing of games of ``Accordian'' patie ...

  8. ACM学习历程——UVA127 "Accordian" Patience(栈, 链表)

    Description  ``Accordian'' Patience  You are to simulate the playing of games of ``Accordian'' patie ...

  9. Uva 127 poj 1214 `Accordian'' Patience 纸牌游戏 模拟

    Input Input data to the program specifies the order in which cards are dealt from the pack. The inpu ...

随机推荐

  1. MITK Tutorial(二)

    目标: 生成MITK 插件包括一个新用户交互的视图,并调用一些ITK filters. Step 1: How to create a new MITK Plugin 可以选择用Plugin Gene ...

  2. mysql存储过程中字符串参数单引号

    注意:存储过程中单引号  ,四个单引号 SET @sql = CONCAT('select user_id into ',m_user_id,' from go_user where mobile = ...

  3. 编写一个小程序,从标准输入读入一系列string对象,寻找连续重复出现的单词。程序应该找出满足一下条件的单词:该单词的后面紧接着再次出现自己本身。跟踪重复次数最多的单词及其重复次数,输出.

    // test13.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  4. C#序列化与反序列化(Serialize,Deserialize)实例详解

    这篇文章主要介绍了C#序列化与反序列化(Serialize,Deserialize)的方法,实例分析了C#序列化与反序列化的常见技巧,需要的朋友可以参考下 本文实例讲述了C#序列化与反序列化(Seri ...

  5. 【HDOJ】【3853】LOOPS

    概率DP/数学期望 kuangbin总结中的第7题 其实跟UVA 11762 Race To 1 那道题差不多……直接推下公式,然后倒推即可 Trick:有的点可能是p1[i][j]==1……这样的点 ...

  6. wordpress数据库优化wp_posts表 OPTIMIZE

    wordpress数据库优化wp_posts表 对 MySQL 数据记录进行插入.更新或删除时,会占有不同大小的空间,记录就会变成碎片,且留下空闲的空间.就像具有碎片的磁盘,会降低性能,需要整理,因此 ...

  7. C# foreach循环绑定key数组和value 数组(备用)

    <div class="ContextualTab inner_warp clearfix" data-max="2" data-blur=false d ...

  8. Fragment (一)

      1,简介 Fragement(碎片)允许将Activity拆分成多个完全独立封装的可重用组件,每个组件有它自己的生命周期和UI布局,由此可见,Fragement依赖于Activity,它的生命周期 ...

  9. 用django-tinymce搞个富文本编辑器

    玩过一圈之后,这些应用慢慢变得简单: 步骤如下: 一,安装: pip install django-tinymce 二,配置APP: INSTALLED_APPS = ( ... 'tinymce', ...

  10. Android 解决ListView中每一项与button冲突

    在listView的item里面如果有button,ImageButton等控件,会使得ListView不会被点击,解决方法是: ①在Button上面添加属性 android:focusable=&q ...