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;
}

这比赛输这么惨也不是什么意外…… 努力练吧,呵呵。

comments powered by Disqus