题目大意:甲和乙玩游戏,甲给出n(n<=50)个等长的字符串(len<=20),然后甲选出其中一个字符串,乙随机询问该字符串某一位的字符(不会重复询问一个位置),求乙能确定该串是哪个字符串的询问次数的期望值

这题不看题解好难想......(感谢zhx和zhx两位大佬的题解)

len很小,考虑状压DP,显然我们要状压询问,要定义两个状态,f[]和num[]

1表示询问,0表示未询问

那么,我们定义f[s]表示询问状态s距离确定一个字符串所需要的期望值。

定义tot是s状态剩余的询问的次数,那么显然因为询问剩余的每一位的概率是相等的

而一个询问并不一定能确定唯一一个字符串,可能是好几个,所以我们要处理这个询问状态能确定几个字符串,即num[s]

而num[s]并不能通过暴力枚举得到,所以我们只能通过枚举它的父集来获取它的状态

我们把字符串两两匹配,定义为s状态不能确定的串(用二进制表示哪些串不能确定),接着我们从大到小枚举状态,每个子集都从它的父集更新,取所有的并集,其中1的数量即为num

tip1:而如果1的数量为1,该状态仍然可以确定所有的串,所以此时num是0

最后我们得到一个很玄学的方程

最后的f[0]即为答案

tip2:当n==1时,出题人貌似想告诉我们,因为不论问不问都只有一个串,所以不用问也知道是哪个......

 #include <cstdio>
#include <algorithm>
#include <cstring>
#define N 55
#define maxn (1<<20)+100
#define ll long long
#define dd double
#define seed 13131
using namespace std; int n,m;
char str[][];
dd f[maxn];
ll unidf[maxn];
int num[maxn]; int main()
{
//freopen("aa.in","r",stdin);
scanf("%d",&n);
if(n==) {printf("0.0000000000\n");return ;}
for(int i=;i<n;i++)
scanf("%s",str[i]);
m=strlen(str[]);
for(int i=;i<n;i++)
for(int j=i+;j<n;j++)
{
int pos=;
for(int k=;k<m;k++){
if(str[i][k]==str[j][k])
pos|=(<<k);
}
unidf[pos]|=(1ll<<j)|(1ll<<i);
}
for(int s=(<<m)-;s>=;s--)
{
for(int i=;i<m;i++)
if(!(s&(<<i))) unidf[s]|=unidf[s|(<<i)];
for(int j=;j<n;j++)
if(unidf[s]&(1ll<<j)) num[s]+=;
if(num[s]==) num[s]=;
}
f[(<<m)-]=;
for(int s=(<<m)-;s>=;s--)
{
if(!num[s]) {f[s]=;continue;}
int tot=;
for(int i=;i<m;i++) if(!(s&(<<i)))tot++;
for(int i=;i<m;i++)
{
if(((<<i)&s)) continue;
f[s]+=(f[s|(<<i)]/(dd)tot*(dd)num[s|(<<i)]/(dd)num[s]);
}
f[s]+=1.0;
}
printf("%.10lf\n",max(f[],1.00000000000));
return ;
}

CF482C Game with Strings (状压DP+期望DP)的更多相关文章

  1. P4547 [THUWC2017]随机二分图(状压,期望DP)

    期望好题. 发现 \(n\) 非常小,应该要想到状压的. 我们可以先只考虑 0 操作. 最难的还是状态: 我们用 \(S\) 表示左部点有哪些点已经有对应点, \(T\) 表示右部点有哪些点已经有对应 ...

  2. [CF697D]Puzzles 树形dp/期望dp

    Problem Puzzles 题目大意 给一棵树,dfs时随机等概率选择走子树,求期望时间戳. Solution 一个非常简单的树形dp?期望dp.推导出来转移式就非常简单了. 在经过分析以后,我们 ...

  3. Codeforces Round #302 (Div. 1) C - Remembering Strings 状压dp

    C - Remembering Strings 思路:最关键的一点是字符的个数比串的个数多. 然后就能状压啦. #include<bits/stdc++.h> #define LL lon ...

  4. [思路题][LOJ2290][THUWC2017]随机二分图:状压DP+期望DP

    分析 考虑状压DP,令\(f[sta]\)表示已匹配状态是\(sta\)(\(0\)代表已匹配)时完美匹配的期望数量,显然\(f[0]=1\). 一条边出现了不代表它一定在完美匹配内,这也导致很难去直 ...

  5. BZOJ1076/Luogu2473 奖励关(SCOI2008)状压DP+期望DP

    题意:给n(n<=15)种宝物宝物有价值w且每个宝物有一个前置宝物(即你必须先吃过它的所有前置宝物至少一次才能吃该宝物),共有m轮游戏,每一轮会在n种宝物等概率选一个出来,因为宝物价值可正可负你 ...

  6. Codeforces 544E Remembering Strings 状压dp

    题目链接 题意: 给定n个长度均为m的字符串 以下n行给出字符串 以下n*m的矩阵表示把相应的字母改动成其它字母的花费. 问: 对于一个字符串,若它是easy to remembering 当 它存在 ...

  7. B1076 [SCOI2008]奖励关 状压dp&&期望dp

    这个题的n<15,一看就是状压dp.但是状态不是很好想.f[][]存i关的状态j. 这个题另一个关键思想在于倒推,我一开始想的是正推,但是只能记忆化了. 题干: 题目描述 你正在玩你最喜欢的电子 ...

  8. HDU 4336-Card Collector(状压,概率dp)

    题意: 有n种卡片,每包面里面,可能有一张卡片或没有,已知每种卡片在面里出现的概率,求获得n种卡片,需要吃面的包数的期望 分析: n很小,用状压,以前做状压时做过这道题,但概率怎么推的不清楚,现在看来 ...

  9. 【洛谷3343_BZOJ3925】[ZJOI2015]地震后的幻想乡(状压 DP_期望)

    题目: 洛谷 3343 BZOJ 3925 分析: 谁给我说这是个期望概率神题的,明明没太大关系好吧 「提示」里那个结论哪天想起来再问 Jumpmelon 怎么证. 首先,由于开始修路前 \(e_i\ ...

随机推荐

  1. Project Euler 28 Number spiral diagonals

    题意:给出一个 1001 × 1001 的矩阵,寻找每一圈四个顶点,并求出所有顶点的和 思路:只需要找到右上顶点数字的规律,然后每一圈四个顶点构成了一个等差数列,求个和即可 /************ ...

  2. docker 私有仓库的两种方式

    1.使用官方默认的registry镜像构建本地仓库 这种方式适用于小规模的镜像仓库储存,没有Ui界面 (1)docker pull registry (2)docker run -d -p 5000: ...

  3. Python IO编程-读写文件

    1.1给出规格化得地址字符串,这些字符串是经过转义的能直接在代码里使用的字符串 需要导入os模块 import os >>>os.path.join('user','bin','sp ...

  4. android AndroidManifest.xml 属性详细解析

    一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...

  5. 【codeforces 807A】Is it rated?

    [题目链接]:http://codeforces.com/contest/807/problem/A [题意] 给你n个人在一场CF前后的rating值; 问你这场比赛是不是计分的 [题解] 如果有一 ...

  6. 使用maven服务器插件 运行项目

    使用jetty插件  部署运行 创建一个maven项目:去Maven仓库中寻找jetty插件  然后复制到pom.xml中 使用命令  运行程序: 然后控制台打印: 通过浏览器   访问: ----- ...

  7. 干货:鲜为人用的MySQL高级特性与玩法!

    上一篇文章<万字总结:学习MySQL优化原理,这一篇就够了!>文末给大家留有两个开放的问题: 有非常多的程序员在分享时都会抛出这样一个观点:尽可能不要使用存储过程,存储过程非常不容易维护, ...

  8. ASP.Net Cookie总结

    Cookie是一段文本信息,在客户端存储 Cookie 是 ASP.NET 的会话状态将请求与会话关联的方法之一.Cookie 也可以直接用于在请求之间保持数据,但数据随后将存储在客户端并随每个请求一 ...

  9. 屌丝、小白怎么拿国内巨头offer

    不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕仰慕.看看这些牛人,NOI金牌.开源社区名人,三年级開始写Basic...在跪拜之余我们不禁要想,和这些牛人比,作为绝大部分技 ...

  10. 杂项-公司:Altera

    ylbtech-杂项-公司:Altera 自二十年前发明世界上第一个可编程逻辑器件开始,Altera公司(阿尔特拉)(NASDAQ:ALTR)秉承了创新的传统,是世界上“可编程芯片系统”(SOPC)解 ...