csu1290 Random Integers ——DP入门题&&比赛残留题
May 19, 2013
DP
题目链接:http://122.207.68.93/OnlineJudge/problem.php?id=1290 题目大意: 从K个不同的数字里面有放回地随机选N次,求选到的不同的数字的种类的期望。 题目思路: 这题不能用概率公式推导。因为有很多项的阶乘,应该会超double范围。应该用DP做。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
const int MAX=1000+10;
double dp[MAX][MAX];
int main(void) {
int i, j, k, t;
double N, K;
scanf("%d", &t);
while (t--) {
scanf("%lf%lf", &K, &N);
double sum = 0.0;
for (i = 0; i <= N; ++i) for (j = 0; j <= K; ++j)
dp[i][j] = 0.0;
dp[0][0] = 1.0;
for (i = 1; i <= N; ++i){
for (j = 1; j <= K; ++j){
dp[i][j]=dp[i-1][j-1]*(K-j+1)/K + dp[i-1][j]*(j/K);
//sum += (j*dp[i][j]);
}
}
for (i = 1; i <= K; ++i) {
sum += (i * dp[(int)N][i]);
}
printf("%.5f\n", sum);
}
return 0;
}
这比赛输这么惨也不是什么意外…… 努力练吧,呵呵。