【POJ】2096 Collecting Bugs
http://poj.org/problem?id=2096
题意:s个系统n种bug,每天找出一个bug,种类的概率是1/n,系统的概率是1/s。问:每个系统至少找出一个bug;每种类的bug都被找出。的期望天数(0<n, s<=1000)
#include <cstdio>
using namespace std;
double d[1005][1005];
int n, s;
double D;
int main() {
scanf("%d%d", &n, &s);
d[s][n]=0;
D=s*n;
for(int i=s; i>=0; --i) for(int j=n; j>=0; --j) if(!(i==s&&j==n))
d[i][j]=((d[i+1][j]*(s-i)*j+d[i][j+1]*i*(n-j)+d[i+1][j+1]*(s-i)*(n-j))/D+1)/(1-i*j/D);
printf("%.4f\n", d[0][0]);
return 0;
}
设$d(i, j)$表示已经找到了$i$个系统的bug,$j$种bug还需要的期望天数,显然答案是$d(0, 0)$
考虑转移:由于$d(i, j)$可以转移到5种子集,且互斥,转移如下:
- 权为1,概率为1。(表示今天找到的bug)
- 权为$d(i, j)$,概率为$i*j/s/n$。(表示由找到了一个旧系统且是旧种类的bug的状态转移过来)
- 权为$d(i+1, j)$,概率为$(s-i)*j/s/n$。(表示由找到了一个新系统但是是旧种类的bug的状态转移过来)
- 权为$d(i, j+1)$,概率为$i*(n-j)/s/n$。(表示由找到了一个旧系统但是是新种类的bug的状态转移过来)
- 权为$d(i+1, j+1)$,概率为$(s-i)*(n-j)/s/n$。(表示由找到了一个新系统且新种类的bug的状态转移过来)
发现是不是和一般的dp不同了呢?转移中有自己!哈哈,这就是期望dp的精髓所在= =
那么我们可以移项了= =(这样就不会无限递归,体现了数学的奥秘= =)最后得到:
$$d(i, j) = (ijd(i, j)+(s-i)jd(i-1, j)+i(n-j)d(i, j-1)+(s-i)(n-j)d(i-1, j-1)+1)/(n*s)/(1-ij/(n*s))$$
可能你会说,为什么要设“还需要的期望天数”而不是“转移到当前状态的期望天数”呢?因为在自己对自己的转移中,假设那样设状态的话,答案显然是$d(s, n)$对吧,可是你会发现转移方程除数变成0了!因此状态转移不过来...
而前者由于初始状态显然是$d(s, n)=0$,就不会出现除数为0也就是求极限的步骤啦= =,因此可以这样搞下去啦= =。(其实上边的状态不是不可做,可以无限递归,其实就是极限= =,换一种方式设状态就是避免了陷入求极限)
【POJ】2096 Collecting Bugs的更多相关文章
- 【POJ】2096 Collecting Bugs(数学期望)
题目 传送门:QWQ 分析 数学期望 用$ dp[i][j] $表示发现了在$ j $个子系统里面发现了$ i $个bug到$ s $个子系统里面发现了$ n $个bug需要的期望天数. $ dp[0 ...
- POJ 2096 Collecting Bugs 期望dp
题目链接: http://poj.org/problem?id=2096 Collecting Bugs Time Limit: 10000MSMemory Limit: 64000K 问题描述 Iv ...
- 【POJ】1704 Georgia and Bob(Staircase Nim)
Description Georgia and Bob decide to play a self-invented game. They draw a row of grids on paper, ...
- 【POJ】1067 取石子游戏(博弈论)
Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...
- poj 2096 Collecting Bugs 【概率DP】【逆向递推求期望】
Collecting Bugs Time Limit: 10000MS Memory Limit: 64000K Total Submissions: 3523 Accepted: 1740 ...
- poj 2096 Collecting Bugs - 概率与期望 - 动态规划
Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other material stu ...
- POJ 2096 Collecting Bugs
Collecting Bugs Time Limit: 10000MS Memory Limit: 64000K Total Submissions: 1716 Accepted: 783 C ...
- poj 2096 Collecting Bugs 概率dp 入门经典 难度:1
Collecting Bugs Time Limit: 10000MS Memory Limit: 64000K Total Submissions: 2745 Accepted: 1345 ...
- Poj 2096 Collecting Bugs (概率DP求期望)
C - Collecting Bugs Time Limit:10000MS Memory Limit:64000KB 64bit IO Format:%I64d & %I64 ...
随机推荐
- 傻瓜式十分钟免费开启 HTTPS,是时候为你的站点加上小绿锁了
http://gold.xitu.io/entry/57df65690bd1d00057f9455b?from=singlemessage&isappinstalled=0 原文链接:http ...
- JavaWeb学习之什么JSP、JSP是如何工作的、JSP语言(各种指令和九大内置对象)、EL表达式简单使用(5)
1.什么JSP * servlet:java编写的处理动态web的技术 * 特点:Java代码中嵌套html代码 * jsp * 特点:HTMl代码中嵌套java代码 * %tomcat%/conf/ ...
- 【Java EE 学习 21 下】【使用java实现邮件发送、邮件验证】
一.邮件发送 1.邮件发送使用SMTP协议或者IMAP协议,这里使用SMTP协议演示. SMTP协议使用的端口号:25 rfc821详细记载了该协议的相关信息 (1)使用telnet发送邮件(使用12 ...
- 不定义JQuery插件,不要说会JQuery 分类: JavaScript 2014-11-24 14:18 155人阅读 评论(0) 收藏
一:导言 有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写$("#"),$("."),写了几年就对别人说非常熟悉JQuery.我曾经也是这样的人 ...
- [读书笔记] Web 前端开发修炼之道
原创地址:http://www.cnblogs.com/bnbqian/p/3735565.html 转载请注明出处 今天我们要读的书是Web 前端开发修炼之道 第1章 从网站重构说起 1.1 糟糕的 ...
- codeforce好地方啊 Bear and Elections *
Codeforces Round #318 居然可以看测试数据,哪里没过一目了然,哈哈哈 #include<cstdio> #include<iostream> #includ ...
- 用.NET开发通用Windows App
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:随着Windows 10的正式发布,作为.NET开发人员应该开始或多或少了解一下通用( ...
- 基于ZigBee的家居控制系统的设计与应用
基于ZigBee的家居控制系统的设计与应用 PPT简介:http://pan.baidu.com/s/1i38PC6D 摘 要 智能家居是未来家居的发展方向,其利用先进的网络技术.计算机技术和无线通 ...
- java thread run and start
在java中继承Thread,线程启动有两中方法:start()和run().下面简单介绍一下两者的区别. start():启动一个线程,此时线程处于就绪状态,然后调用Thread对象的run()方法 ...
- 获取内核当前执行模块和当前发生异常地址和线程异常Handler调用步骤
循环每个内核模块 统计模块大小 判断触发异常的地址属于那个模块.来确定模块 获取发生异常地址 nt!_EXCEPTION_RECORD +0x000 ExceptionCode : -21391605 ...