poj 2096


 1 /**
2 程序员调bug
思路: 一共有四种情况,
1、 1个原有的bug 在原有的分类中
2、 1个原有的bug 在新的分类中
3、 1个新的bug 在原有的分类中
4、 1个新bug 在新的分类中

3 **/
4 #include <iostream>
5 #include <cstdio>
6 using namespace std;
7 double dp[1010][1010];
8 int main()
9 {
10 int n,s;
11 cin>>n>>s;
12 for(int i=n;i>=0;i--){
13 for(int j=s;j>=0;j--){
14 if(i==n&&j==s)
15 continue;
16 double p1 = (double(s-j)*i)/n/(s);
17 double p2 = (double(n-i)*j)/n/(s);
18 double p3 = (double(s-j)*(n-i))/n/(s);
19 double p0 = 1.0-(double(j*i))/n/(s);
20 dp[i][j] = p1*dp[i][j+1]+p2*dp[i+1][j]+p3*dp[i+1][j+1]+1;
21 dp[i][j] /= p0;
22 }
23 }
24 printf("%.4lf\n",dp[0][0]);
25 return 0;
26 }

poj 2096

时间: 2024-10-14 14:24:52

poj 2096的相关文章

[ACM] poj 2096 Collecting Bugs (概率DP,期望)

Collecting Bugs Time Limit: 10000MS   Memory Limit: 64000K Total Submissions: 2026   Accepted: 971 Case Time Limit: 2000MS   Special Judge Description Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other material st

POJ 2096:Collecting Bugs 概率DP求期望

Collecting Bugs 题目连接: http://poj.org/problem?id=2096 题意: Ivan喜欢收集bug,他每天都会找到一个bug,找到的这个bug有一种属性并且属于一个子系统,bug共有n种属性,子系统共有s个 (0<n, s≤1000),求Ivan集齐了n种bug且每个子系统都有bug的期望. 题解: 第一道求期望的题,令dp[i][j]表示系统已经有了i个系统的全部j种bug并且要得到所有bug的天数的期望,因此dp[n][s]=0,而dp[0][0]则是所

POJ 2096 Collecting Bugs

题目:http://poj.org/problem?id=2096 显然可以得到状态 $f(i,j)$ 表示集齐了i种BUG,来自于j个系统距离集齐的期望步数. 然后有 $f(i,j) -> f(i,j) \  P0 = i/n \cdot j/m$ $f(i+1,j) -> f(i,j)\  P1 = (1-i/n) \cdot j/m$ $f(i+1,j) -> f(i,j) \  P2 = i/n \cdot (1-j/m)$ $f(i+1,j+1) -> f(i,j)\  

poj 2096 Collecting Bugs(期望)

http://poj.org/problem?id=2096 程序的bug有n个子集,s个种类.每一个bug属于每个子集的概率为1/n,每一个bug属于每个种类的概率为1/s,问每个子集且每个种类都有bug的期望. 求期望,设dp[i][j]表示已有bug属于i个子集,j个种类的期望,现已知终态为dp[n][s] = 0,dp[i][j]可由逆推而得: dp[i][j],新的bug属于已有的i个子集j个分类,概率为i/n * j/s; dp[i][j+1],新的bug属于已有的i个子集但不属于已

POJ 2096 Collecting Bugs:期望dp

题目链接:http://poj.org/problem?id=2096 题意: 有一个程序猿,他每天都会发现一个bug. bug共有n个种类.属于某一个种类的概率为1/n. 有s个子系统,每个bug属于一个系统.属于某一个系统的概率为1/s. 问你发现的bug能够覆盖到n个种类和s个系统的期望天数. 题解: 期望dp转移的套路: 倒着推. 利用性质:期望 = ∑ (P(子期望)*φ(子期望)) 状态表示: dp[i][j] = expectation i:覆盖到i个种类 j:覆盖到j个系统 dp

poj 2096 (概率DP)

http://poj.org/problem?id=2096 概率DP: 1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 double dp[1003][1003]; 5 int main() 6 { 7 int n,s,i,j; 8 cin>>n>>s; 9 for (i=n;i>=0;i--) 10 { 11 for (j=s;j>=0;j--) 12 { 13

poj 2096 Collecting Bugs【概率DP】

题目链接:http://poj.org/problem?id=2096 题意: 一个软件有s个子系统,会产生n种bug. 某人一天发现一个bug,这个bug属于某种bug,发生在某个子系统中. 求找到所有的n种bug,且每个子系统都找到bug,这样所要的天数的期望. 需要注意的是:bug的数量是无穷大的,所以发现一个bug,出现在某个子系统的概率是1/s, 属于某种类型的概率是1/n. 解法: dp[i][j]表示已经找到i种bug,并存在于j个子系统中,要达到目标状态的天数的期望. 显然,dp

POJ 2096 Collecting Bugs(dp 期望)

题目链接:http://poj.org/problem?id=2096 Description Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other material stuff, he collects software bugs. When Ivan gets a new program, he classifies all possible bugs into n ca

poj 2096 Collecting Bugs——期望DP

题目:http://poj.org/problem?id=2096 f[ i ][ j ] 表示收集了 i 个 n 的那个. j 个 s 的那个的期望步数. #include<cstdio> #include<cstring> #include<algorithm> #define db double using namespace std; const int N=1005; db n,s,f[N][N]; int main() { scanf("%lf%l