传送门:>Here<

题意:有n种病毒存在于s个子任务中。每个子任务中的病毒数量可以看做无限。每天可以发现一个病毒,问在所有的s个子任务中,总共发现满n种病毒的期望时间

解题思路:

  期望DP。

  $f[i][j]$表示已发现i个子任务中的j种病毒距离目标状态的期望天数。

  $f[n][s] = 0$, 求$f[0][0]$

  考虑通过每次可能发现的病毒特性进行转移——$f[i][j]$可以从四个状态进行转移,分别是$f[i][j], f[i+1][j], f[i][j+1], f[i+1][j+1]$

  首先对于$f[i][j]$转移$f[i][j]$,意味着本次发现的病毒既不是新的种类的,也不是新的子任务里的。发现这种病毒的概率$p_1$是$\frac{i*j}{n*s}$

  $f[i+1][j]$转移$f[i][j]$,意味着本次发现的病毒是新的子任务里的,但是是已知种类的。由于发现这种子任务只能从新的里面去选了,所以概率为$n-i$,因此发现这种病毒的概率$p_2$是$\frac{(n-i)*j}{n*s}$

  $f[i][j+1]$转移$f[i][j]$,意味着本次发现的病毒不是新的子任务里的,但是是未知的种类。发现这种病毒的概率$p_3$是$\frac{(i*(s-j)}{n*s}$

  $f[i+1][j]$转移$f[i][j]$,意味着本次发现的病毒既是新的子任务里的,也是未知种类的。发现这种病毒的概率$p_4$是$\frac{(n-i)*(s-j)}{n*s}$

  因此我们只需要让每种状态的期望乘以相应的概率再加上1就可以了$$f[i][j] = f[i][j] * p_1 + f[i+1][j] * p_2 + f[i][j+1] * p_3 + f[i+1][j+1] * p_4 + 1$$

  还是老套路,消去右边的f[i][j],再除系数得

  $$ f[i][j] = \frac{f[i+1][j] * p_2 + f[i][j+1] * p_3 + f[i+1][j+1] * p_4 + 1}{1 - p_1} $$

Code

  可能是标程打错了,把printf中的%.4lf改成%.4f竟然对了,而且我用得是double不是float

/*By QiXingzhi*/
#include <cstdio>
#include <queue>
#define  r  read()
#define  Max(a,b)  (((a)>(b)) ? (a) : (b))
#define  Min(a,b)  (((a)<(b)) ? (a) : (b))
using namespace std;
typedef long long ll;
const int N = 1010;
const int INF = 1061109567;
inline int read(){int x = 0; int w = 1; register int c = getchar();while(c ^ '-' && (c < '0' || c > '9')) c = getchar();if(c == '-') w = -1, c = getchar();while(c >= '0' && c <= '9') x = (x << 3) +(x << 1) + c - '0', c = getchar();return x * w;
}
int n,s;
double K,p1,p2,p3,p4;
double f[N][N];
int main(){scanf("%d %d",&n,&s);f[n][s] = 0;for(int i = n; i >= 0; --i){for(int j = s; j >= 0; --j){if(i == n && j == s) continue;p1 = (double)(i*j) / (double)(n*s);p2 = (double)((n-i)*j) / (double)(n*s);p3 = (double)(i*(s-j)) / (double)(n*s);p4 = (double)((n-i)*(s-j)) / (double)(n*s);K = p2*f[i+1][j] + p3*f[i][j+1] + p4*f[i+1][j+1] + 1;f[i][j] = (double)(K) / (double)(1.0 - p1);}}printf("%.4f", f[0][0]);return 0;
}

转载于:https://www.cnblogs.com/qixingzhi/p/9346686.html

[POJ2096] Collecting bugs相关推荐

  1. 【poj2096】Collecting Bugs 期望dp

    题目描述 Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other materia ...

  2. Collecting Bugs POJ - 2096(基础概率dp+期望模板)

    题意: 有s个系统,n种bug,小明每天找出一个bug,可能是任意一个系统的,可能是任意一种bug,即是某一系统的bug概率是1/s,是某一种bug概率是1/n. 求他找到s个系统的bug,n种bug ...

  3. 【POJ - 2096】Collecting Bugs(概率dp)

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

  4. Collecting Bugs(解决bug)

    传送门 数据: Input Input file contains two integer numbers, n and s (0 < n, s <= 1 000). Output Out ...

  5. POJ 2096 Collecting Bugs:期望dp

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

  6. Collecting Bugs (DP期望)

    题意:一个软件有s个子系统,会产生n种bug,某个人一天发现一个bug,这个bug属于某种bug,发生在某个子系统里.求找到所有的n种bug和s个子系统所需的天数的数学期望.(程序中的bug数量几乎是 ...

  7. ICPC程序设计题解书籍系列之九:罗勇军《算法竞赛入门到进阶》

    罗书<算法竞赛入门到进阶>题目一览 第1章 算法竞赛概述 HDU1000 HDU1089-HDU1096 A+B for Input-Output Practice (I)-(VIII)( ...

  8. 插头DP 概率DP / 期望DP

    插头DP && 概率DP / 期望DP 写在前面: 插头DP P5056 [模板]插头dp 手写哈希表的方法: 拉链法的代码如下: 开放寻址法的代码如下: 接下来是这道题的代码实现: ...

  9. 【整理】一堆磨人の数学概率期望

    都是水题 = = ↑ 这四个字太能概括一切了 [1] ZOJ 3785 What day is that day? (找规律) 题意:求11 + 22 + 33 + ... + NN  mod 7 的 ...

最新文章

  1. 从屌丝毕业生到三次优秀员工(腾讯三年工作感悟)
  2. SQL 查询逻辑处理顺序
  3. 收到在微软商店购买的商品
  4. YUI 的模块信息配置优先级关系梳理
  5. 就php干活,php可以做什么?,懂得这些技巧就够了
  6. idea 修改html 不重启,解决idea spring boot 修改html等不重启即时生效的问题
  7. Swiper 在vue中的使用,loop=true获取真实index,数据更新刷新初始化swiper
  8. XGBoost算法原理
  9. 网络安全实验8 基于网络入侵检测系统
  10. HDFView3.1.4下载好了环境变量也配置了但就是打不开!!
  11. 把14亿中国人民都拉到一个微信群里在技术上能实现吗?
  12. ArcMap通过空间校正工具转换BJ-54坐标系到WGS-84坐标系
  13. 华尔街不是中国的机会
  14. python爬虫:模拟登录新浪微博并实现cookies保存,详细讲一下rsa
  15. MacBook 安装win7双系统、2013款MacBook air安装双系统教程
  16. Android版本与SDK 版本对应关系
  17. win7不显示移动硬盘_Mac 下移动硬盘异常退出修复
  18. navicat 16安装 注册机path报错
  19. HTML入门基础(1)
  20. 【精】EOS智能合约:system系统合约源码分析

热门文章

  1. java中 关于静态方法的定义_为什么我们不能在Java接口中定义静态方法?
  2. 调整jvm参数_JVM源码分析之MetaspaceSize和MaxMetaspaceSize的区别
  3. 高级政工师具备的能力_环境污染治理能力评价资质标准【广东资质申报专家】...
  4. token怎么获取 php,如何用php获取某个页面中的input的csrf_token?
  5. 后端传输流跨域_Java开发中解决Js的跨域问题过程解析
  6. php 未找到驱动程序,Laravel 5 PDOException找不到驱动程序
  7. mongodb排序_MongoDB排序
  8. python类和对象_Python类和对象
  9. 如何在Windows 10上安装Python
  10. 浅析人工智能自然语言生成定义