1. 程式人生 > >牛客國慶集訓派對Day2 H 卡牌遊戲 [ 期望dp ]

牛客國慶集訓派對Day2 H 卡牌遊戲 [ 期望dp ]

題目描述

小貝喜歡玩卡牌遊戲。某個遊戲體系中共有N種卡牌,其中M種是稀有的。小貝每次和電腦對決獲勝之後都會有一個抽卡機會,這時系統會隨機從N種卡中選擇一張給小貝。普通卡可能多次出現,而稀有卡牌不會被重複抽到。小貝希望收集到K種稀有卡牌,她想知道期望需要多少次獲勝才能實現這個目標。

輸入描述:

資料有多組,第一行一個整數T表示資料組數。 每組資料一行,三個整數N,M,K .

輸出描述:

對於每組資料,輸出形如"Case #x: y",其中 x 為這組資料的編號(從1開始),y 為這組資料的答案。答案的絕對誤差或相對誤差在10-6以內都認為是正確的。

輸入

2 5 2 1 40 9 5

輸出

Case #1: 2.5 Case #2: 28.1146825397

思路 : 概率dp ,(實際高中數學) 假設第 x 次抽到第一張那麼 x * n / m = 1,第二張同理

AC code :

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

const int maxn = 1e5+50;

double dp[maxn] ;

int main() {
	int t ,ncase = 1 ; cin >> t;
	while( t -- ) {
		int
n ,m ,k ; scanf("%d %d %d",&n,&m,&k); dp[0] = n / double(m); for (int i = 1;i<=k;i++) { dp[i] = dp[i-1] + (n-i) / double(m-i); } printf("Case #%d: %.8lf\n",ncase ++,dp[k-1]); } return 0; }