标程可能有问题… 最后输出要用%f
这道题可以算是所有题目的模板了
//MADE BY Y_is_sunshine;
//#include <bits/stdc++.h>
//#include <memory.h>
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <cstdio>
#include <vector>
#include <string>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#define INF 0x3f3f3f3f
#define MAXN 1005
const int mod = 1e9 + 7;
const double PI = acos(-1);
using namespace std;
double dp[MAXN][MAXN];
int main()
{
freopen("data.txt", "r", stdin);
int N, M;
while (cin >> N >> M) {
memset(dp, 0, sizeof(dp));
for (int i = N; i >= 0; i--) {
for (int j = M; j >= 0; j--) {
if (i == N && j == M)
continue;
double p1 = 1.0 * (N - i) * (M - j) / (N * M); //1、在新的子系统中发现新的bug,即dp[i + 1][j + 1]
double p2 = 1.0 * i * (M - j) / (N * M); //3、在已经发现过bug的子系统中发现新的bug,即dp[i][j + 1]
double p3 = 1.0 * (N - i) * j / (N * M); //2、在新的子系统中发现已经发现过的bug,即dp[i + 1][j]
double p4 = 1.0 * i * j / (N * M); //4、在已经发现过bug的子系统中发现已经发现过的bug,即dp[i][j]
//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] = (p1 * dp[i + 1][j + 1] + p2 * dp[i][j + 1] + p3 * dp[i + 1][j] + 1) / (1 - p4);
}
}
printf("%.4f\n", dp[0][0]);
}
freopen("CON", "r", stdin);
system("pause");
return 0;
}