牛客國慶集訓派對Day2 H 卡牌遊戲 [ 期望dp ]
阿新 • • 發佈:2018-12-13
題目描述
小貝喜歡玩卡牌遊戲。某個遊戲體系中共有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;
}