先说一下题意

$s$ 个子系统还中有 $n$ 种 $\text{bug}$,每天可以随机选择一种 $\text{bug}$,问选出 $n$ 种 $\text{bug}$ 在 $s$ 种子系统中的期望天数。

解题思路

不妨设 $dp[i][j]$ 表示在选择 $i$ 种 $\text{bug}$,$j$ 种子系统的期望天数。

那么新选择的 $\text{bug}$ 就会出现一下四种情况

  • 新发现的 $\text{bug}$ 在已经发现的 $i$ 种 $\text{bug}$中,已经发现的 $j$ 个子系统中,概率是 $p1=\frac{i}{n} \times \frac{j}{s}$
  • 新发现的 $\text{bug}$ 在已经发现的 $i$ 种 $\text{bug}$中,但却在新的子系统里,概率是 $p2=\frac{i}{n} \times \frac{s-j}{s}$
  • 新发现的 $\text{bug}$ 是新的 $\text{bug}$,但却在已经发现的子系统里,概率是 $p3=\frac{n-i}{n} \times \frac{j}{s}$
  • 新发现的 $\text{bug}$ 是新的 $\text{bug}$,也在新的子系统中,概率是 $p4=\frac{n-i}{n} \times \frac{s-j}{s}$

稍微推一下就能够得到状态转移方程。

附上代码

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int n, s;
double dp[][], p1, p2, p3, p4;
int main() {
while (scanf("%d%d", &n, &s) == ) {
memset(dp, , sizeof(dp));
for(int i=n; i>=; i--) {
for(int j=s; j>=; j--) {
if(i == n && j == s) continue;
p1 = 1.0 * i/n * j/s;
p2 = 1.0 * i/n * (s-j)/s;
p3 = 1.0 * (n-i)/n * j/s;
p4 = 1.0 * (n-i)/n * (s-j)/s;
dp[i][j] = (dp[i][j+]*p2 + dp[i+][j]*p3 + dp[i+][j+]*p4 + 1.0) / (1.0-p1);
}
}
printf("%.4lf\n", dp[][]);
}
}

「 poj 2096 」 Collecting Bugs的更多相关文章

  1. 【POJ 2096】 Collecting Bugs

    [题目链接] http://poj.org/problem?id=2096 [算法] 概率DP [代码] #include <algorithm> #include <bitset& ...

  2. 【POJ 2096】Collecting Bugs 概率期望dp

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

  3. 「专题训练」Collecting Bugs(POJ-2096)

    题意与分析 题意大致是这样的:给定一个\(n\times s\)的矩阵,每次可以随机的在这个矩阵内给一个格子染色(染过色的仍然可能被选中),问每一行和每一列都有格子被染色的次数的期望. 这题如果从概率 ...

  4. 「POJ 3666」Making the Grade 题解(两种做法)

    0前言 感谢yxy童鞋的dp及暴力做法! 1 算法标签 优先队列.dp动态规划+滚动数组优化 2 题目难度 提高/提高+ CF rating:2300 3 题面 「POJ 3666」Making th ...

  5. 【POJ】【2096】Collecting Bugs

    概率DP/数学期望 kuangbin总结中的第二题 大概题意:有n个子系统,s种bug,每次找出一个bug,这个bug属于第 i 个子系统的概率为1/n,是第 j 种bug的概率是1/s,问在每个子系 ...

  6. 「POJ Challenge」生日礼物

    Tag 堆,贪心,链表 Solution 把连续的符号相同的数缩成一个数,去掉两端的非正数,得到一个正负交替的序列,把该序列中所有数的绝对值扔进堆中,用所有正数的和减去一个最小值,这个最小值的求法与「 ...

  7. 「POJ 3268」Silver Cow Party

    更好的阅读体验 Portal Portal1: POJ Portal2: Luogu Description One cow from each of N farms \((1 \le N \le 1 ...

  8. 「POJ 1135」Domino Effect(dfs)

    BUPT 2017 Summer Training (for 16) #3G 题意 摆好的多米诺牌中有n个关键牌,两个关键牌之间有边代表它们之间有一排多米诺牌.从1号关键牌开始推倒,问最后倒下的牌在哪 ...

  9. 「POJ - 1003」Hangover

    BUPT 2017 summer training (16) #2C 题意 n个卡片可以支撑住的长度是1/2+1/3+1/4+..+1/(n+1)个卡片长度.现在给出需要达到总长度,求最小的n. 题解 ...

随机推荐

  1. zabbix 监控zookeeper

    1.监控脚本如下:check_zookeeper.sh 1 2 #!/bin/bash echo mntr | nc 127.0.0.1 2182 | grep "$1" |awk ...

  2. c#调用oracle存储过程返回数据集

    c#调用oracle存储过程返回数据集 2008-12-20 10:59:57|  分类: net|字号 订阅   CREATE OR REPLACE PACKAGE pkg_tableTypeIS  ...

  3. Java工作中常用到的工具

    刚看但网上一篇Java最流行工具的文章,结合自己日常应用总结一下开发工作中常用到的工具. 一,Java版本,jdk8,也是Java普及最快的版本,除了本身性能提升外,新增的函数式编程特性也让开发效率更 ...

  4. ECS服务器配置密钥登录及常用日志

    一.介绍 1.SSH(22端口)是Secure Shell Protocol的简写,由IETF网络工作小组(Network Working Group)制定:在进行数据传输之前,SSH先对联机数据包通 ...

  5. 2-5 原生小程序 - 语法缺点.mp4

  6. http-2.2

    HTTP-2.2 httpd 配置文件的组成: grep "Section" /etc/httpd/conf/httpd.conf ### Section 1: Global En ...

  7. HashMap1

    一.Java并发基础 当一个对象或变量可以被多个线程共享的时候,就有可能使得程序的逻辑出现问题. 在一个对象中有一个变量i=0,有两个线程A,B都想对i加1,这个时候便有问题显现出来,关键就是对i加1 ...

  8. "git rm" 和 "rm" 的区别(转载)

    转自:http://yang3wei.github.io/blog/2013/02/03/git-rm-he-rm-de-qu-bie/ 这是一个比较肤浅的问题,但对于 git 初学者来说,还是有必要 ...

  9. redis简介及常见问题

    目录 简介 特点 优点 高性能 高并发 为什么要用 redis 而不用 map/guava 做缓存? redis 和 memcached 的区别 Redis快的原因 为什么redis是单线程 为什么r ...

  10. jwt的应用生成token,redis做储存

    解释一下JWT JWT就是一个字符串,经过加密处理与校验处理的字符串,由三个部分组成.基于token的身份验证可以替代传统的cookie+session身份验证方法.三个部分分别如下: header. ...