poj 2096 Collecting Bugs 概率dp 入门经典 难度:1
Time Limit: 10000MS | Memory Limit: 64000K | |
Total Submissions: 2745 | Accepted: 1345 | |
Case Time Limit: 2000MS | Special Judge |
Description
Two companies, Macrosoft and Microhard are in tight competition. Microhard wants to decrease sales of one Macrosoft program. They hire Ivan to prove that the program in question is disgusting. However, Ivan has a complicated problem. This new program has s subcomponents, and finding bugs of all types in each subcomponent would take too long before the target could be reached. So Ivan and Microhard agreed to use a simpler criteria --- Ivan should find at least one bug in each subsystem and at least one bug of each category.
Macrosoft knows about these plans and it wants to estimate the time that is required for Ivan to call its program disgusting. It's important because the company releases a new version soon, so it can correct its plans and release it quicker. Nobody would be interested in Ivan's opinion about the reliability of the obsolete version.
A bug found in the program can be of any category with equal probability. Similarly, the bug can be found in any given subsystem with equal probability. Any particular bug cannot belong to two different categories or happen simultaneously in two different subsystems. The number of bugs in the program is almost infinite, so the probability of finding a new bug of some category in some subsystem does not reduce after finding any number of bugs of that category in that subsystem.
Find an average time (in days of Ivan's work) required to name the program disgusting.
Input
Output
Sample Input
- 1 2
Sample Output
- 3.0000
- 感想:一开始列出公式不知道干什么,但是实际上,从n,s的状态向0,0状态逆着递推,当n,s状态时,一步也不需要移动,否则因为后面的状态已经不会影响到前面的状态,直接转移,感觉这个实在是概率dp;当时遇到的打开新思路的一道题
思路:dp[i][j]代表已经得到i种bug,j个子项目有bug,达成目标所需的最少次数,那么dp[n][s]明显为0,其余的某种状态dp[i][j],只可能最多向四种情况转移,也就是dp[i][j],概率为i*j/n/s,dp[i][j+1]概率为i*(s-j)/n/s,dp[i+1][j]概率为(n-i)*j/n/s,dp[i+1][j+1],概率为(n-i)*(s-j)/n/s,现在其它三种状态((i+1,j),(i,j+1),(i+1,j+1))都得到了,于是dp[i][j]就是唯一的未知量,可以解出来
dp[i][j]=1+dp[i+1][j]*j*(n-i)/n/s+dp[i][j+1]*i*(s-j)/n/s+dp[i+1][j+1]*(s-j)*(n-i)/n/s+dp[i][j]*i*j/n/s;
- #include <cstdio>
- #include <cstring>
- using namespace std;
- int n,s;
- double dp[1001][1001];
- int main(){
- while(scanf("%d%d",&n,&s)==2){
- memset(dp,0,sizeof(dp));
- for(int i=n;i>=0;i--){
- for(int j=s;j>=0;j--){
- if(i==n&&j==s)continue;
- dp[i][j]=1+dp[i+1][j]*j*(n-i)/n/s+dp[i][j+1]*i*(s-j)/n/s+dp[i+1][j+1]*(s-j)*(n-i)/n/s;
- double p=1-(double)i*j/n/s;
- dp[i][j]/=p;
- }
- }
- printf("%.4f\n",dp[0][0]);
- }
- }
poj 2096 Collecting Bugs 概率dp 入门经典 难度:1的更多相关文章
- POJ 2096 Collecting Bugs (概率DP,求期望)
Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other material stu ...
- poj 2096 Collecting Bugs (概率dp 天数期望)
题目链接 题意: 一个人受雇于某公司要找出某个软件的bugs和subcomponents,这个软件一共有n个bugs和s个subcomponents,每次他都能同时随机发现1个bug和1个subcom ...
- Poj 2096 Collecting Bugs (概率DP求期望)
C - Collecting Bugs Time Limit:10000MS Memory Limit:64000KB 64bit IO Format:%I64d & %I64 ...
- POJ 2096 Collecting Bugs (概率DP)
题意:给定 n 类bug,和 s 个子系统,每天可以找出一个bug,求找出 n 类型的bug,并且 s 个都至少有一个的期望是多少. 析:应该是一个很简单的概率DP,dp[i][j] 表示已经从 j ...
- POJ 2096 Collecting Bugs 期望dp
题目链接: http://poj.org/problem?id=2096 Collecting Bugs Time Limit: 10000MSMemory Limit: 64000K 问题描述 Iv ...
- poj 2096 Collecting Bugs - 概率与期望 - 动态规划
Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other material stu ...
- poj 2096 Collecting Bugs 【概率DP】【逆向递推求期望】
Collecting Bugs Time Limit: 10000MS Memory Limit: 64000K Total Submissions: 3523 Accepted: 1740 ...
- poj 2096 Collecting Bugs && ZOJ 3329 One Person Game && hdu 4035 Maze——期望DP
poj 2096 题目:http://poj.org/problem?id=2096 f[ i ][ j ] 表示收集了 i 个 n 的那个. j 个 s 的那个的期望步数. #include< ...
- Collecting Bugs (概率dp)
Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other material stu ...
随机推荐
- conda
Conda是什么? Conda 是Anaconda下用于包管理和环境管理的命令行工具, Conda下一切都是包,包括Python和conda自己 Conda ≍ pip(包管理) + vitualen ...
- mongodb 的使用
install: 1.ubuntu用deb安装. 2.下载压缩文件,绿色的,不用安装. 推荐此方法. 配置dbpath: 1.用deb安装的,会在 /etc 目录下 创建mongodb.conf ...
- Nodepad++ 资料整理
http://www.crifan.com/files/doc/docbook/rec_soft_npp/release/webhelp/use_sbracket_lite_autocomplete_ ...
- 2.1 The Object Model -- Classes and Instances(类和实例)
一.Defining Classes(定义类) 1. 定义一个新的Ember类,调用Ember.Object上的extend()方法: example:定义了一个含有say()方法的新的Person类 ...
- Polya
using namespace std; typedef long long LL; const int MAXN = 1e3 +10; const LL MOD = (LL)1 << 6 ...
- [转][访谈]数据大师Olivier Grisel给志向高远的数据科学家的指引
原文:http://www.csdn.net/article/2015-10-16/2825926?reload=1 Olivier Grisel(OG)本人在InriaParietal工作,主要研发 ...
- INNODB索引与算法
在之前的博文中简单提到了索引的分类与索引的可选择性查看:Click HERE 这片博客主要包含内容:索引组织表,索引算法B+树简单介绍 索引组织表 在innodb存储引擎中,表都是根据主键顺序组织存放 ...
- JS实现焦点图轮播效果
大家平时逛淘宝网的时候,在首页就能看到焦点图轮播的效果,就是这个样子的: PS:想起每每打开淘宝,总会被这个玩意先夺眼球,偶尔还去点进去溜溜,幸好我定力好,总能控制住自己的购买欲望,为自己不用剁手感到 ...
- 采用注解方式实现security
采用注解方式使用security,首先我们需要用注解方式实现Spring MVC,新建一个Maven项目 本项目目录结构如下: 我们会发现在WEB-INF中没有web.xml文件,下面会介绍,采用j ...
- in和exists
exists和in的使用方式: #对B查询涉及id,使用索引,故B表效率高,可用大表 -->外小内大 select * from A where exists (select * from B ...