差一个数据没过,应该用概率dp,不应该用计数dp
#includeusing namespace std; typedef unsigned long long ULL; ULL n, m, f[25][25]; int main() { scanf("%lld%lld", &m, &n); if(n < m) { printf("0.0000"); return 0; } f[0][0] = 1; for(int i = 1; i <= n; i ++ ) for(int j = 1; j <= m; j ++ ) { if(i == j) { int t1 = m, t2 = 1; for(int k = 0; k < j; k ++ ) { t2 *= t1 -- ; } f[i][j] = t2; } else if(i > j) { f[i][j] = f[i - 1][j] * j + f[i - 1][j - 1] * (m - (j - 1)); } else f[i][j] = 0; } double sum = 0; for(int i = 1; i <= m; i ++ ) { sum += (float) f[n][i] / f[n][m]; } printf("%.4f", 1.0 / sum); return 0; }



