Time Limit: 10000MS | Memory Limit: 64000K | |
Total Submissions: 5747 | Accepted: 2843 | |
Case Time Limit: 2000MS | Special Judge |
Description
Input
Output
Sample Input
1 2
Sample Output
3.0000
思路:令 f[i][j] 表示已经找到了 i 种 bug,且 j 个子系统至少包含一个 bug,距离完成目标需要的时间的期望。
目标状态是 f[0][0]。再过一天找到一个 bug 可能是如下的情况:
1. 这个 bug 的种类是 已经找到的 并且 出现在 已经找到 bug 的子系统中:f[i][j](i*j)/(n*m)
2. 这个 bug 的种类是 已经找到的 并且 出现在 没有找到 bug 的子系统中:f[i][j+1](i*(m-j)/(n*m))
3. 这个 bug 的种类是 没有找到的 并且 出现在 已经找到 bug 的子系统中:f[i+1][j]((n-i)*j/(n*m))
4. 这个 bug 的种类是 没有找到的 并且 出现在 没有找到 bug 的子系统中:f[i+1][j+1]((n-i)*(m-j)/(n*m))
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #include <vector> #include <cstdlib> #include <iomanip> #include <cmath> #include <ctime> #include <map> #include <set> using namespace std; #define lowbit(x) (x&(-x)) #define max(x,y) (x>y?x:y) #define min(x,y) (x<y?x:y) #define MAX 100000000000000000 #define MOD 1000000007 #define pi acos(-1.0) #define ei exp(1) #define PI 3.141592653589793238462 #define INF 0x3f3f3f3f3f #define mem(a) (memset(a,0,sizeof(a))) typedef long long ll; double a[1005][1005]; int n,m; //i/n,j/s; //E(X) = X1*p(X1) + X2*p(X2) + …… + Xn*p(Xn) = X1*f1(X1) + X2*f2(X2) + …… + Xn*fn(Xn) //a[i][j]=p1*a[i][j]+p2*a[i+1][j]+p3*a[i][j+1]+p4*a[i+1][j+1]; //a[i][j]=(p2*a[i+1][j]+p3*a[i][j+1]+p4*a[i+1][j+1])(1-p1); //期望的好好在看看,全忘了,不搜百度百科都不知道是啥了,差点以为超几何了。QAQ int main() { scanf("%d%d",&n,&m); a[n][m]=0.0; for(int i=n;i>=0;i--) { for(int j=m;j>=0;j--) { if(i==n && j==m) continue; a[i][j]=(i*(m-j)*a[i][j+1]+(n-i)*j*a[i+1][j]+(n-i)*(m-j)*a[i+1][j+1]+n*m)/(n*m-i*j); } } printf("%.4f\n",a[0][0]); return 0; }
原文:http://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/7240208.html