逆着递推求解
题意:
一个软件有s个子系统,会产生n种bug
某人一天发现一个bug,这个bug属于一个子系统,属于一个分类
每个bug属于某个子系统的概率是1/s,属于某种分类的概率是1/n
问发现n种bug,每个子系统都发现bug的天数的期望。

求解:
dp[i][j]表示已经找到i种bug,j个系统的bug后要达到目标状态的天数的期望
dp[n][s]=0;要求的答案是dp[0][0];
dp[i][j]可以转化成以下四种状态:
dp[i][j],发现一个bug属于已经有的i个分类和j个系统。概率为(i/n)*(j/s);
dp[i][j+1],发现一个bug属于已有的分类,不属于已有的系统.概率为 (i/n)*(1-j/s);
dp[i+1][j],发现一个bug属于已有的系统,不属于已有的分类,概率为 (1-i/n)*(j/s);
dp[i+1][j+1],发现一个bug不属于已有的系统,不属于已有的分类,概率为 (1-i/n)*(1-j/s);
整理便得到转移方程
dp[i][j]=p1*dp[i+1][j+1]+p2*dp[i+1][j]+p3*dp[i][j+1]+p4*dp[i][j]+1; //dp[i][j]表示的就是到达状态i,j的期望,+1是因为一天后

=>dp[i][j]=(p1*dp[i+1][j+1]+p2*dp[i+1][j]+p3*dp[i][j+1]+1)/(1-p4);

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <cstdlib>
 6 #include <cmath>
 7 #include <set>
 8 #include <map>
 9 #include <queue>
10 #include <vector>
11 #define INF 0x3f3f3f3f
12 using namespace std;
13
14 double dp[1010][1010];
15 int main()
16 {
17     int n, s;
18     scanf("%d %d", &n, &s);
19     for(int i = n; i >= 0; i--)
20     {
21         for(int j = s; j >= 0; j--)
22         {
23             if(i == n && j == s)
24                 continue;
25             dp[i][j] = ((n-i)*j*dp[i+1][j]+i*(s-j)*dp[i][j+1]+(n-i)*(s-j)*dp[i+1][j+1]+n*s)*1.0/(n*s-i*j);
26         }
27     }
28     printf("%.4f\n", dp[0][0]);
29     return 0;
30 }

转载于:https://www.cnblogs.com/luomi/p/5693049.html

poj2096_概率dp相关推荐

  1. 2018.09.01 poj3071Football(概率dp+二进制找规律)

    传送门 概率dp简单题. 设f[i][j]表示前i轮j获胜的概率. 如果j,k能够刚好在第i轮相遇,找规律可以发现j,k满足: (j−1)>>(i−1)(j−1)>>(i−1) ...

  2. Discovering Gold LightOJ - 1030[概率dp或者记忆化搜索]

    题目大意:有一个[1,n][1,n][1,n]的数轴,数轴上的每个对应位置上都有金矿,你初始位置是1,然后你每次都会投色子决定你下一步跳到哪里,如果你跳出了nnn,那么你就要重新投.问你跳到nnn的时 ...

  3. 【原创】概率DP总结 by kuangbin

    概率DP主要用于求解期望.概率等题目. 转移方程有时候比较灵活. 一般求概率是正推,求期望是逆推.通过题目可以体会到这点. 首先先推荐几篇参考的论文: <信息学竞赛中概率问题求解初探> & ...

  4. poj 3071 Football(概率dp)

    http://poj.org/problem? id=3071 大致题意:有2^n个足球队分成n组打比赛.给出一个矩阵a[][],a[i][j]表示i队赢得j队的概率.n次比赛的流程像这样France ...

  5. HDU 5001 概率DP || 记忆化搜索

    2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP  測 ...

  6. hdu 3853 LOOPS 概率DP

    简单的概率DP入门题 代码如下: 1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 ...

  7. HDU - 4035 Maze(概率dp)

    题目链接:点击查看 题目大意:给出一个 n 个点的树,初始时位于点 1 ,每个点都会给出一个概率 k[ i ] 和一个概率 e[ i ] ,其代表的意义分别是: k[ i ] :在点 i 有 k[ i ...

  8. SDUT - 2623 The number of steps(概率dp)

    题目链接:点击查看 题目大意:给出一个 n 层的三角形,第一层有 1 个点,第二层有 2 个点,第三层有 3 个点 ... 第 n 层有 n 个点,现在规定从第一层的点向下出发: 如果左下方有点并且右 ...

  9. 牛客练习赛26B 烟花 (概率DP)

    链接:https://ac.nowcoder.com/acm/contest/180/B 来源:牛客网 烟花 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5 ...

最新文章

  1. OpenCV(总结篇)图像逐像素访问(三种操作:指针、迭代器、at()函数)
  2. C# mongodb 类库
  3. QT绘制散点图(2)
  4. 算法模板-对称性递归
  5. as3 java 交互_AS3常用代码(三):AS3与HTML的交互
  6. (软件工程复习核心重点)第六章实现和测试习题
  7. bootstrap学习笔记(5)
  8. Golang channel 快速入门
  9. 转帖:django中操作mysql
  10. 团队博客-随笔:团队展示 (科利尔拉弗队)
  11. (11)数据分析-TableOne工具
  12. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第5节 线程池_2_线程池的代码实现...
  13. android 仿qq it蓝豹,十大Android开源项目-IT蓝豹
  14. Python如何实现图片显示
  15. 845 数组中的最长山脉
  16. 在Windows下使用Tortoise Git时,提示认证失败的解决办法
  17. 在线更换背景网站(白色背景换为蓝色背景证件照)
  18. 是非人生 — 一个菜鸟程序员的5年职场路 第30节
  19. 转:张五常:比知识更重要的,是思维方式
  20. SOLIDWORKS Electrical端子排管理

热门文章

  1. [多级联动下拉选择框]和[Tree to Tree]续——让他们可以设置默认值
  2. 一种改进的快速人脸检测算法
  3. Haar小波变换的快速实现
  4. 如何给你的web项目加入log4net支持
  5. Python--day7--面向对象编程进阶
  6. [LeetCode]ZigZag Conversion
  7. First Night
  8. 2008R2文件服务器迁移到2012R2
  9. iOS ASIHttpRequest 封装
  10. 《从零开始学Swift》学习笔记(Day 26)——可选链