题目大意:

一个人受雇于某公司要找出某个软件的bugs和subcomponents,这个软件一共有n个bugs和s个subcomponents,每次他都能同时随机发现1个bug和1个subcomponent,问他找到所有的bugs和subcomponents的期望次数。

这道题目要用期望dp来进行统计

假设已经找到i个bug和j个subcomponents,这个状态记为dp[i][j],那么下次查找会出现4种状态:dp[i][j],dp[i+1][j],dp[i][j+1],dp[i+1][j+1]

这四种状态的概率为 i*j*1.0/n/s , (n-i)*j*1.0/n/s , i*(s-j)*1.0/n/s , (n-i)*(s-j)*1.0/n/s

那么每到下一种 状态步数要加1,那么我们领dp[i][j]为到达全部找完bug和subcomponents的数学期望,亦可理解为,在这个状态还需多少步能完成任务

这样我们就可以得到公式:

dp[i][j] = 1 + i*j*1.0/n/s * dp[i][j] +  (n-i)*j*1.0/n/s * dp[i+1][j] + i*(s-j)*1.0/n/s * dp[i][j+1] + (n-i)*(s-j)*1.0/n/s * dp[i+1][j+1]

那么我们就可以通过后面的状态不断递推来找到前面的状态的值就行了

我们可以很容易知道dp[n][s] = 0;

为了方便计算,不用排除特殊情况,那么我们就将dp[n+1][1]~dp[n+1][s]   dp[1][1+s]~dp[n][s+1]设为0作为初始化

然后从后往前不断完善这个矩阵的dp[][]值

最后输出dp[0][0]就是我们要求的值

 #include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define N 1005
double dp[N][N];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m)){
for(int i=;i<=n+;i++)
dp[i][m+]=; for(int i=;i<=m+;i++)
dp[n+][i]=; dp[n][m]=; for(int i=n;i>=;i--){
for(int j=m;j>=;j--){
if(i==n&&j==m)
continue;
double tmp = + i*(m-j)*1.0/n/m * dp[i][j+] + (n-i)*j*1.0/m/n * dp[i+][j] + (n-i)*(m-j)*1.0/m/n * dp[i+][j+];
dp[i][j] = tmp / (-i*j*1.0/m/n);
}
} printf("%.4f\n",dp[][]);
}
return ;
}

POJ 2096 找bug 期望dp的更多相关文章

  1. POJ 2096 Collecting Bugs 期望dp

    题目链接: http://poj.org/problem?id=2096 Collecting Bugs Time Limit: 10000MSMemory Limit: 64000K 问题描述 Iv ...

  2. POJ 2096 Collecting Bugs (概率DP,求期望)

    Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other material stu ...

  3. poj 2096 Collecting Bugs (概率dp 天数期望)

    题目链接 题意: 一个人受雇于某公司要找出某个软件的bugs和subcomponents,这个软件一共有n个bugs和s个subcomponents,每次他都能同时随机发现1个bug和1个subcom ...

  4. Poj 2096 Collecting Bugs (概率DP求期望)

    C - Collecting Bugs Time Limit:10000MS     Memory Limit:64000KB     64bit IO Format:%I64d & %I64 ...

  5. POJ 2096 Collecting Bugs (概率DP)

    题意:给定 n 类bug,和 s 个子系统,每天可以找出一个bug,求找出 n 类型的bug,并且 s 个都至少有一个的期望是多少. 析:应该是一个很简单的概率DP,dp[i][j] 表示已经从 j ...

  6. poj 2096 Collecting Bugs 概率dp 入门经典 难度:1

    Collecting Bugs Time Limit: 10000MS   Memory Limit: 64000K Total Submissions: 2745   Accepted: 1345 ...

  7. poj - 2096 概率dp (找bug)

    题意:一个人一天只能找1个bug ,这个bug属于s个子系统中的某一个子系统,属于n种bug 中的某一种 ,求 这个人找出n种bug ,并且s个系统都bug的期望 (每个系统的一定可以找出bug) 一 ...

  8. POJ 2096 Collecting Bugs:期望dp

    题目链接:http://poj.org/problem?id=2096 题意: 有一个程序猿,他每天都会发现一个bug. bug共有n个种类.属于某一个种类的概率为1/n. 有s个子系统,每个bug属 ...

  9. poj 2096 Collecting Bugs(期望 dp 概率 推导 分类讨论)

    Description Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other ...

随机推荐

  1. Android偏好设置(3)启动偏好设置后显示的界面PreferenceActivity和PreferenceFragment

    Creating a Preference Activity To display your settings in an activity, extend the PreferenceActivit ...

  2. AlertDialog的实现

    课程Demo 重点解析自定义对话框 public class MainActivity extends AppCompatActivity { private Button bt1; private ...

  3. TNS-00511: 无监听程序

    这里到服务里面打开 tns 的监听服务

  4. 高仿人人网客户端Android版项目源码

    高仿人人网客户端,有兴趣的盆友可以研究下,里面主要包含的一些UI设计与交互.(注:项目中有少许问题,apk能运行,希望开发者可以参考代码研究一下.) 源码下载:http://code.662p.com ...

  5. PPTP的搭建

    一.准备 1.检查是否支持pptp modprobe ppp-compress-18 && echo yes yes支持 2.是否开启tun cat /dev/net/tun 返回ca ...

  6. HTTP/2 带来的新颖

    Binary Frames HTTP2 在TCP层之上 HTTP下增加了Binary Frames协议, 基于该协议HTTP Request/Response 可以被分拆成由Frame组成的Strea ...

  7. 深入理解python对象及属性

    类属性和实例属性首先来看看类属性和类实例的属性在python中如何存储,通过__dir__方法来查看对象的属性 >>> class Test(object): pass>> ...

  8. 使用GetLogicalDriveStrings获取卷标

    #include <windows.h> #include <stdio.h> #define BUFSIZE 512 int main() { TCHAR szTemp[BU ...

  9. 导入.sql文件入数据库

    1.创建数据库,例如abc create database abc; 2.进入数据库 use abc 3.导入e盘下的ssh.sql文件即可 source e:\ssh.sql; 截图如下:

  10. linux下查找字符串的命令

    1. set命令可以显示出当前shell下所有全局参量定义及其值;   2. 查找并删除当前目录下小文件: find . -type f -size -10k -exec rm {} \; 说明: w ...