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

一直在纠结 dp[i][j]是不是自己的子期望 ,先这么想吧:dp[i][j] 的子期望是四种状态 ,所以在这里面 ,dp[i][j]状态转移方程可以这么写 ,但是要从它表示的意义去理解

撸代码:

#include<stdio.h>
double dp[1011][1011];
/*
明确 期望的求法 :(可能结果的概率乘以其结果)的总和;期望可以分成多个子期望的加权和 dp[i][j] 表示 已找到的i种 属于j个系统之中的bug,达到目标天数的期望
dp[n][s] 就是目标本身 ,所以为0
dp[i][j] 转化为:
dp[i][j] 发现1个bug 属于 i种bug和j个子系统中 p1= (i*j)/(n*s)
dp[i+1][j] 发现1个bug 不属于i种bug ,但属于已找到的j个子系统中 p2 = (i+1)*j/(n*s)
dp[i][j+1] 发现1个bug 属于i种bug,但不属于已找到的j个子系统中p3 = i*(j+1)/(n*s)
dp[i+1][j+1] 发现1个bug ,不属于 i种bug,也不属于j个子系统中 p4 = (i+1)*(j+1)/(n*s)
期望可以分解成多个期望的加权和
四种状态是子期望,因为每个bug找1天,所以加1
dp[i][j] = dp[i][j]*p1+dp [i+1][j]*p2+dp[i][j+1]*p3+dp[i+1][j+1]*p4+1;
移项:状态转移方程
*/
int main()
{
int s,n;
while(~scanf("%d%d",&n,&s))
{
dp[n][s]=0;
for(int i=n;i>=0;i--)
{
for(int j=s;j>=0;j--)
{
if(i==n&&j==s) continue;
double p2=dp[i+1][j]*(n-i)*j;
double p3=dp[i][j+1]*i*(s-j);
double p4=dp[i+1][j+1]*(n-i)*(s-j);
dp[i][j]=(n*s+p2+p3+p4)/(n*s-i*j);
}
}
printf("%.4f\n",dp[0][0]);
}
return 0;
}

poj - 2096 概率dp (找bug)的更多相关文章

  1. POJ 2096 (概率DP)

    题目链接: http://poj.org/problem?id=2096 题目大意:n种bug,s个子系统.每天随机找一个bug,种类随机,来自系统随机.问找齐n种bug,且每个子系统至少有一个bug ...

  2. POJ 2151 概率DP

    主要的子问题是每一个队伍有一个做出题目的概率,求做出k个题目的概率.简单的简单的组合数DP.想清楚即可. 1: #include <iostream> 2: #include <cs ...

  3. POJ 3701 概率DP

    给定2^n 支足球队进行比赛,n<=7. 队伍两两之间有一个获胜的概率,求每一个队伍赢得最后比赛的概率是多少? 状态其实都是很显然的,一开始觉得这个问题很难啊,不会.dp[i][j] 表示第i支 ...

  4. Scout YYF I POJ - 3744(概率dp + 矩阵快速幂)

    题意: 一条路上有n个地雷,你从1开始走,单位时间内有p的概率走一步,1-p的概率走两步,问安全通过这条路的概率 解析: 很容易想到 dp[i] = p * dp[i-1] + (1 - p) * d ...

  5. poj 3071 概率dp

    转自:cxlove 题目:有2^n个队,相邻的两两打淘汰赛,,求最后哪个队夺冠的概率最大 dp[i][j]表示第i轮的时候,第j去支队伍赢的概率. 那么dp[i][j]的前提就是i-1轮的时候,j是赢 ...

  6. poj 3744 概率dp+矩阵快速幂

    题意:在一条布满地雷的路上,你现在的起点在1处.在N个点处布有地雷,1<=N<=10.地雷点的坐标范围:[1,100000000]. 每次前进p的概率前进一步,1-p的概率前进1-p步.问 ...

  7. Check the difficulty of problems - poj 2151 (概率+DP)

    有 T(1<T<=1000) 支队伍和 M(0<M<=30) 个题目,已知每支队伍 i 解决每道题目 j 的的概率 p[i][j],现在问:每支队伍至少解决一道题,且解题最多的 ...

  8. poj 2151 概率DP(水)

    Check the difficulty of problems Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5750   ...

  9. poj 3744 概率dp 快速幂 注意排序 难度:2

    /* Scout YYF I Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5304   Accepted: 1455 De ...

随机推荐

  1. 5——PHP逻辑运算符&&唯一的三元运算符

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  2. python库常用函数学习

    os.path #返回标准化的绝对路径,基本等同于normpath() os.path.abspath(path) #返回文件名 os.path.basename(path) #返回目录名 os.pa ...

  3. Eclipse+Mysql实现多条件查询

    最近做一个项目的时候,就需要用到多条件查询,但是一直不完美,所有有bug,不过今天经高人提醒,做出了个小例子,在这里简单跟大家分享一下: 不说多了,直接放关键sql代码: 已知条件:菜名,菜品,价格区 ...

  4. mysql从5.5升级到5.7遇到的坑

    在安装mysql5.7时很顺利安装完成,但在启动项目时报错: [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clau ...

  5. iOS围绕某点缩放或旋转的AnchorPoint的设定

    经常会遇到需求,要求手势的缩放或者旋转操作,要求动作变化围绕某一个特定点,或者是两指的中心点,或者是某一个点. 这个问题首先要清晰的知道,iOS各个view的层次关系.特别是,要清除的知道,当前vie ...

  6. 02 JPA

    JPA概述 JPA的全称是Java Persistence API, 即Java 持久化API,是SUN公司推出的一套基于ORM的规范,内部是由一系列的接口和抽象类构成.       JPA通过JDK ...

  7. TLS/SSL 梳理

    数据加密通篇都是为了防止第三方的劫持伪造,保证连接安全, 毫无遮掩的明文传输只有民风淳朴的时候才是安全的. 先是一些基础的内容: 对称加密 最开始为了对数据进行加密,使用的是对称加密算法,即双方协商好 ...

  8. R调用C++示例

    sourceCpp {Rcpp}:Source C++ Code from a File or String sourceCpp(file = "", code = NULL, e ...

  9. Python面向对象之:三大特性:继承,封装,多态以及类的约束

    前言: python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情 ...

  10. vue基础 ref的作用

    1.  ref 获取dom元素,除了能获取dom元素也能获取组件dom,   组件通信:        在父组件中直接调用ref定义的组件的数据或者方法 <div id="app&qu ...