题链:

http://acm.hdu.edu.cn/showproblem.php?pid=3689
题解:

KMP,概率dp
(字符串都从1位置开始)
首先对模式串S建立next数组。
定义dp[i][j]表示猴子打的串长度为i,且该串的后缀与模式串最多匹配到j位置的概率。
显然dp[0][0]=1,
考虑如何转移:
枚举下一个打出的字符为c,然后用kmp的next数组找到模式串中可以继续匹配的位置k。
即:k=j+1; while(k&&S[k]!=c) k=next[k];
然后将dp[i][j]贡献给dp[i+1][k],由全概率公式可得到的:
"猴子打了i个字符,最多匹配到模式串的第j个字符"这个事件为前提条件时,
有p(c)的概率发生"猴子打了i+1个字符,最多匹配到了模式串的第k个字符"这个事件。
所以dp[i+1][k]+=dp[i][j]*p(c)

代码:

#include<bits/stdc++.h>
using namespace std;
char key[30];
double p[30],dp[1005][15],ans;
int nxt[15];
int C,N;
void buildnxt(char *S){
int n=strlen(S+1),j,k;
nxt[1]=0; j=1; k=0;
while(j<=n){
if(k==0||S[j]==S[k]){
j++; k++; nxt[j]=k;
}
else k=nxt[k];
}
}
int main(){
static char S[15];
while(1){
scanf("%d%d",&C,&N);
if(!C&&!N) break;
for(int i=1;i<=C;i++)
scanf(" %c%lf",&key[i],&p[i]);
scanf("%s",S+1);
int len=strlen(S+1);
buildnxt(S);
for(int i=0;i<=N;i++)
for(int j=0;j<=len;j++) dp[i][j]=0;
dp[0][0]=1;
for(int i=0;i<N;i++)
for(int j=0;j<len;j++){
if(dp[i][j]==0) continue;
for(int c=1;c<=C;c++){
int k=j+1;
while(k&&S[k]!=key[c]) k=nxt[k];
dp[i+1][k]+=dp[i][j]*p[c];
}
}
ans=0;
for(int i=1;i<=N;i++) ans+=dp[i][len];
printf("%.2lf%%\n",ans*100);
}
return 0;
}

  

●HDU 3689 Infinite monkey theorem的更多相关文章

  1. hdu 3689 Infinite monkey theorem

    Infinite monkey theorem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  2. HDU 3689 Infinite monkey theorem [KMP DP]

    Infinite monkey theorem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...

  3. HDU 3689 Infinite monkey theorem(DP+trie+自动机)(2010 Asia Hangzhou Regional Contest)

    Description Could you imaging a monkey writing computer programs? Surely monkeys are smart among ani ...

  4. [HDU 3689]Infinite monkey theorem (KMP+概率DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3689 黄老师说得对,题目只有做wa了才会有收获,才会有提高. 题意:一个猴子敲键盘,键盘上有n个键,猴 ...

  5. [AC自己主动机+可能性dp] hdu 3689 Infinite monkey theorem

    意甲冠军: 给n快报,和m频率. 然后进入n字母出现的概率 然后给目标字符串str 然后问m概率倍的目标字符串是敲数量. 思维: AC自己主动机+可能性dp简单的问题. 首先建立trie图,然后就是状 ...

  6. HDU 3689 Infinite monkey theorem ——(自动机+DP)

    这题由于是一个单词,其实直接kmp+dp也无妨.建立自动机当然也是可以的.设dp[i][j]表示匹配到第i个字母的时候,在单词中处于第j个位置的概率,因此最终的答案是dp[0~m][len],m是输入 ...

  7. hdu 3689 杭州 10 现场 J - Infinite monkey theorem 概率dp kmp 难度:1

    J - Infinite monkey theorem Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d &am ...

  8. HUD3689 Infinite monkey theorem

    Infinite monkey theorem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  9. Infinite monkey theorem(hdu 3689)

    题意:问随机生成一个长度为m(m<=1000)长度的字符串,出现某个子串s的概率是多少. /* KMP+DP 设f[i][j]表示A生成到第i位,此时B串匹配到第j位的概率. 转移方程为f[i+ ...

随机推荐

  1. 从0开始的LeetCode生活—461-Hamming Distance(汉明距离)

    题目: The Hamming distance between two integers is the number of positions at which the corresponding ...

  2. 1013团队Beta冲刺日志集合帖

    Beta预备 Beta冲刺day1 Beta冲刺day2 Beta冲刺day3 Beta冲刺day4 Beta冲刺day5 Beta冲刺day6 Beta冲刺day7 用户使用调查报告 Beta冲刺总 ...

  3. 201621123068 《Java程序设计》第1周学习总结

    1. 本周学习总结 本周学习了如何使用Java来编写程序,还没展开学习具体的语言,但是也花了大量的时间搞清楚Java运行的原理.明白了Java是一种可以跨平台运行语言,搞清了jdk,jre,jvm之间 ...

  4. day-4 python多进程编程知识点汇总

    1. python多进程简介 由于Python设计的限制(我说的是咱们常用的CPython).最多只能用满1个CPU核心.Python提供了非常好用的多进程包multiprocessing,他提供了一 ...

  5. Python 列表嵌套多种实现方式

    #coding=utf-8 list=[] for i in range(1,101): list.append(i) # print(list) tempList=[] newList=[] whi ...

  6. PCB名詞解釋:通孔、盲孔、埋孔(转载)

    文章转载自:https://www.researchmfg.com/2011/07/pth-blind-hole-buried-hole/ PCB名詞解釋:通孔.盲孔.埋孔 Posted by 工作熊 ...

  7. Python爬虫之urllib模块2

    Python爬虫之urllib模块2 本文来自网友投稿 作者:PG-55,一个待毕业待就业的二流大学生. 看了一下上一节的反馈,有些同学认为这个没什么意义,也有的同学觉得太简单,关于Beautiful ...

  8. ASP.NET MVC 5 SmartCode Scaffolding for Visual Studio.Net

    介绍 ASP.NET MVC 5 SmartCode Scaffolding是集成在Visual Studio.Net开发工具中一个ASP.NET MVC Web应用程序代码生成框架,使用SmartC ...

  9. 自动化服务部署(二):Linux下安装jenkins

    jenkins是一个Java开发的开源持续集成工具,广泛用于项目开发,具有自动化构建.测试和部署等功能,它的运行需要Java环境. 上篇博客介绍了Linux下安装JDK的步骤,这篇博客,介绍下Linu ...

  10. js 过多 导致页面加载过慢

    自己的代码检查了很久,才检查 出来 通常我们的网站里面会加载一些js代码,统计啊,google广告啊,百度同盟啊,阿里妈妈广告代码啊, 一堆,最后弄得页面加载速度很慢,很慢. 解决办法:换一个js包含 ...