题目大意:

一个人受雇于某公司要找出某个软件的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. 题解报告:hdu 2094 产生冠军

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2094 Problem Description 有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打 ...

  2. 首先定义一个5X8的二维数组,然后使用随机数填充满。借助Arrays的方法对二维数组进行排序。

    package day02; import java.util.Arrays; import java.util.Random; public class Test01 { public static ...

  3. 自定义View(11)**在onDraw中使用矩阵Matrix

    1.代码示例 1.1 效果 原图 : 其尺寸为162 x 251,示例中的红点是变形的锚点. 变形之后: 1.2 代码 package com.e.weixin.session.view; impor ...

  4. Spring注解驱动开发之web

    前言:现今SpringBoot.SpringCloud技术非常火热,作为Spring之上的框架,他们大量使用到了Spring的一些底层注解.原理,比如@Conditional.@Import.@Ena ...

  5. IO流的原理和概念

    在程序中如何读写文件?不同的编程语言有不同的方式,而 JAVA 则提出了“流”的概念,通过“流”来读写文件 什么是流: 流(Stream)是指一连串的数据(字符或字节),是以先进先出的方式发送信息的通 ...

  6. vue项目中安装cnpm和node_modules

    1.安装cnpm的nodejs包管理工具,命令行: npm install -g cnpm --registry=https://registry.npm.taobao.org   2. 每个vue项 ...

  7. 升级 Cocoapods 到1.2.0指定版本,降低版本及卸载

    =====================升级版本=================== CocoaPods 1.1.0+ is required to build SnapKit 3.0.0+. 在 ...

  8. Android 实现对多个EditText的监听

    create_account=(EditText)findViewById(R.id.create_account); create_password=(EditText)findViewById(R ...

  9. Android学习笔记(十二) 线程

    Android中的线程和Java中的线程使用方法类似,参考(四)Java基础知识回顾 MainThread与WorkerThread UI相关的线程都运行在主线程(MainThread/UIThrea ...

  10. vue HTTP请求(针对vue-resource)

    //初始化页面需要做什么事情 //点击后需要做什么事情 //鼠标.键盘.冒泡.默认行为等事件 //前端调用接口就是按需展示数据//created和mounted里面都可以做数据处理,唯一不同的是cre ...