hdu4652_Dice_概率DP
2018-03-14 19:27
369 查看
题目大意
给以m个面的色子,求:0.多次抛掷中最后n次点数相同的抛掷次数的期望1.多次抛掷中最后n次点数各不相同的抛掷次数的期望思路
0.概率DP的倒推求法,设dp[i]为最后i次点数相同直到最后n次点数相同还需要抛掷的次数的期望dp[i] = 1 / m * dp[i + 1] + (1 - 1 / m) * dp[1] + 1边界:dp= 0可用等比数列求和公式求通项
1.设dp[i]为最后i次点数不同直到最后n次点数相同还需要抛掷的次数的期望dp[i] = (1 - i / m) * dp[i + 1] + 1 / m * (dp[1] + dp[2] + ... + dp[i]) + 1 (i <= n- 2 && i >= 1)dp[n - 1] = 1 / m * (dp[1] + dp[2] + ... + dp[n - 1]) + 1
相邻的式子相减dp[i + 1] - dp[i] = (1 - (i + 1) / m) * (dp[i + 2] - dp[i + 1]) (i >= 1 && i <= n - 3)又dp[1] - dp[2] = 1 / (1 - 1 / m)dp[1] = 1 / (1 - 1 / m) + 1 / [ (1- 1 / m) * (1 - 2 / m) ] + ... + 1 / [ (1- 1 / m) * (1 - 2 / m) * ... * (1 - (n - 1) / m) ]
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define INF 0x3f3f3f3f
#define rep0(i, n) for (int i = 0; i < n; i++)
#define rep1(i, n) for (int i = 1; i <= n; i++)
#define rep_0(i, n) for (int i = n - 1; i >= 0; i--)
#define rep_1(i, n) for (int i = n; i > 0; i--)
#define MAX(x, y) (((x) > (y)) ? (x) : (y))
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
#define mem(x, y) memset(x, y, sizeof(x))
using namespace std;
double multi(double a, int t)
{
int flag = 0;
if (t < 0)
{
t = -t;
flag = 1;
}
double ans = 1;
while (t)
{
if (t & 1)
{
ans *= a;
}
a *= a;
t >>= 1;
}
if (flag)
ans = 1 / ans;
return ans;
}
double solve(int m, int n)
{
if (n == 1)
return 1;
double tmp = multi(m, 1 - n);
return (1 - tmp) / (1 - (double)1 / m) / tmp + 1;
}
double solve1(int m, int n)
{
if (n == 1)
return 1;
double ans = 0, tmp = 1;
for (int i = 1; i <= n - 1; i++)
{
tmp /= 1 - (double)i / m;
ans += tmp;
}
return ans + 1;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif // ONLINE_JUDGE
int t, no, m, n;
//cout << multi(2, -11) <<endl;
while (scanf("%d", &t) != EOF && t)
{
while (t--)
{
scanf("%d %d %d", &no, &m, &n);
if (!no)
{
printf("%.9f\n", solve(m, n));
}
else
printf("%.9f\n", solve1(m, n));
}
}
return 0;
}
相关文章推荐
- lightOJ 1248 - Dice (III) 概率DP
- HDU 4652 Dice(概率dp)
- Dice (III) 概率dp
- 【HDOJ5955】Guessing the Dice Roll(概率DP,AC自动机,高斯消元)
- HDU 4599 Dice 概率DP + 乘法逆元
- Dice (III) (概率DP)
- hdu4652(概率DP,推公式)
- HDU 4599 Dice(概率dp)
- HDU 4652 Dice(概率dp)
- hdu 4599 Dice 概率DP
- LightOJ1248---Dice (III)(概率dp)
- hdu4652(概率dp->数学公式)
- 【LightOJ 1248】Dice (III)(概率DP)
- light oj 1248 - Dice (III)(概率dp)
- HDU 4599 Dice (概率DP+数学+快速幂)
- hdu4652 概率DP
- HDU 4652 Dice (概率DP)
- HDU 4652 Dice (概率DP)
- HDU 4599 Dice (概率dp)
- Light OJ 1248 - Dice (III) 概率DP