您的位置:首页 > 其它

csu1290 Random Integers ——DP入门题&&比赛残留题

2013-05-19 17:07 465 查看
题目链接: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;
}


这比赛输这么惨也不是什么意外……

努力练吧,呵呵。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: