题意:
某个系统中有n个子系统和m个bug类型,该系统每天会出现一个bug (属于某个子系统和某个bug类型),bug的类型是等概率的,bug也是等概率地出现在每个子系统的。问所有子系统都出现bug且所有的bug类型都出现的期望天数。
Input file contains two integer numbers, n and s (0 < n, s <= 1 000).
定义dp[i][j] 含义: 找到i个bug且属于j个系统的期望值
那么状态转移如下:
dp[i][j] = p1 * (dp[i+1][j+1] + 1) + p2 * (dp[i+1][j] + 1) + p3 * (dp[i][j+1] + 1) + p4 * (dp[i][j]+1);//公式中的+1代表本次的操作,即发现一个bug增加的一天
感觉这个+1不是很好理解 既然是转移到下一天,期望+好像也合情合理
于是可写出dp[i][j]表达式 递推即可
double dp[1005][1005]; int main() { double n, s; scanf("%lf%lf", &n, &s); for (int i = n; i >= 0; i--) { for (int j = s; j >= 0; j--) { if (i == n && j == s) continue; dp[i][j] = n*s + (n - i) * j * dp[i + 1][j] + i * (s - j) * dp[i][j + 1] + (n - i) * (s - j) * dp[i + 1][j + 1]; dp[i][j] /= (n * s - i * j); } } printf("%.4f", dp[0][0]); }