被坑的是在POJ选G++的double型要用%f。编译器的问题。。。。
递推式:
d[ i ][ j ] = ( d[ i ][ j ] * i * j + d[ i+1 ][ j ] * ( n - i ) * j + d[ i ][ j + 1 ] * i * ( s - j ) + d[ i + 1 ][ j + 1 ] * ( n - i ) * ( s - j) ) / ( m * n ) + 1;
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
using namespace std;
double d[1111][1111];
int n, m;
int main()
{
while(~scanf("%d%d", &n, &m))
{
d[n][m]=0;
for(int i=n; i>=0; i--)
for(int j=m; j>=0; j--)
{
if(i==n && j==m)
continue ;
d[i][j]=((n-i)*j*d[i+1][j]+i*(m-j)*d[i][j+1]+(n-i)*(m-j)*d[i+1][j+1]+m*n)/(1.0*m*n-i*j);
}
printf("%.4lf\n", d[0][0]);
}
return 0;
}