博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【HDOJ】4652 Dice
阅读量:6787 次
发布时间:2019-06-26

本文共 3301 字,大约阅读时间需要 11 分钟。

1. 题目描述

对于m面的骰子。有两种查询,查询0表示求最后n次摇骰子点数相同的期望;查询1表示最后n次摇骰子点数均不相同的期望。
2. 基本思路
由期望DP推导,求得最终表达式。
(1) 查询0
    不妨设$dp[k]$表示当前已经有k次相同而最终实现n次相同的期望。
    \begin{align}
        dp[0] &= 1 + dp[1]  \notag \\
        dp[1] &= 1 + \frac{1}{m}dp[2] + \frac{m-1}{m}dp[1]  \notag \\
        dp[2] &= 1 + \frac{1}{m}dp[3] + \frac{m-1}{m}dp[1]  \notag  \\
              &\cdots       \notag \\
        dp[n-1] &= 1 + \frac{1}{m}dp[n] + \frac{m-1}{m}dp[1] \notag \\
        dp[n] &= 0
    \end{align}
    两两相减可得。
    \begin{align}
        dp[0]-dp[1] &= \frac{1}{m}(dp[1]-dp[2]) \notag \\
        dp[1]-dp[2] &= \frac{1}{m}(dp[2]-dp[3]) \notag \\
        dp[2]-dp[3] &= \frac{1}{m}(dp[3]-dp[4]) \notag \\
                    &\cdots \notag \\
        dp[n-2]-dp[n-1] &= \frac{1}{m}(dp[n-1]-dp[n])
    \end{align}
    由$dp[0]=1+dp[1], dp[0]-dp[1]=1$代入可得。
    \begin{align}
        dp[0]-dp[1] &= 1 \notag \\
        dp[1]-dp[2] &= m \notag \\
        dp[2]-dp[3] &= m^2 \notag \\
                    &\cdots \notag \\
        dp[n-1]-dp[n] &= m^{n-1}
    \end{align}
    显然是一个等比数列,累加后可得$dp[0]-dp[n]=dp[0]$.
    \begin{align}   
        dp[0] = \frac{m^n-1}{m-1}
    \end{align}

(2)查询1

    不妨设$dp[k]$表示当前已经有k个不同而最终实现n个不同的期望。
    \begin{align}
        dp[0] &= 1 + dp[1] \notag \\
        dp[1] &= 1 + \frac{1}{m}dp[1] + \frac{m-1}{m}dp[2] \notag \\
        dp[2] &= 1 + \frac{1}{m}dp[1] + \frac{1}{m}dp[2] + \frac{m-2}{m}dp[3] \notag \\
                &\cdots \notag \\
        dp[n-1] &= 1 + \Sigma_{i=1}^{n-1}{\frac{1}{m}dp[i]} + \frac{m-(n-1)}{m}dp[n] \notag \\
        dp[n] &= 0
    \end{align}
     两两相减可得。
    \begin{align}
        dp[0]-dp[1] &= \frac{m-1}{m}(dp[1]-dp[2]) \notag \\
        dp[1]-dp[2] &= \frac{m-2}{m}(dp[2]-dp[3]) \notag \\
                    &\cdots \notag \\
        dp[n-2]-dp[n-1] &= \frac{m-(n-1)}{m}(dp[n-1]-dp[n])
    \end{align}
    由$dp[0]=1+dp[1], dp[0]-dp[1]=1$代入累加后可得。
    \begin{align}
        dp[0] = \Sigma_{i=1}^{n} \frac{m^i}{\prod_{j=0}^{i-1}(m-j)}
    \end{align}
3. 代码

1 /* 4652 */ 2 #include 
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 #include
15 #include
16 #include
17 #include
18 #include
19 #include
20 #include
21 #include
22 #include
23 using namespace std;24 //#pragma comment(linker,"/STACK:102400000,1024000")25 26 #define sti set
27 #define stpii set
>28 #define mpii map
29 #define vi vector
30 #define pii pair
31 #define vpii vector
>32 #define rep(i, a, n) for (int i=a;i
=a;--i)34 #define clr clear35 #define pb push_back36 #define mp make_pair37 #define fir first38 #define sec second39 #define all(x) (x).begin(),(x).end()40 #define SZ(x) ((int)(x).size())41 #define lson l, mid, rt<<142 #define rson mid+1, r, rt<<1|143 44 #define LL __int6445 46 int t;47 int op, n, m;48 49 LL Pow(LL base, int n) {50 LL ret = 1;51 52 while (n) {53 if (n & 1)54 ret *= base;55 n >>= 1;56 base *= base;57 }58 59 return ret;60 }61 62 void solve() {63 double ans = 0.0;64 65 if (op) {66 double tmp = 1.0;67 rep(i, 0, n) {68 tmp = tmp * m / (m-i);69 ans += tmp;70 }71 } else {72 LL fz = Pow(m, n) - 1;73 ans = fz / (m-1);74 }75 printf("%.9lf\n", ans);76 }77 78 int main() {79 ios::sync_with_stdio(false);80 #ifndef ONLINE_JUDGE81 freopen("data.in", "r", stdin);82 freopen("data.out", "w", stdout);83 #endif84 85 while (scanf("%d", &t)!=EOF) {86 while (t--) {87 scanf("%d%d%d", &op, &m, &n);88 solve();89 }90 }91 92 #ifndef ONLINE_JUDGE93 printf("time = %d.\n", (int)clock());94 #endif95 96 return 0;97 }

 

转载于:https://www.cnblogs.com/bombe1013/p/5234515.html

你可能感兴趣的文章
小米上市之后,雷军的下一个千亿业务在哪?
查看>>
活动目录的FSMO owner 在ADSI中的对应位置
查看>>
案例分析:排名好但收录与用户不活跃论坛如何解决
查看>>
Nginx+Tomcat动静分离及Nginx优化(企业案例)
查看>>
多家高校网站被挂马 用户应小心QQ盗号木马
查看>>
用ICTCLAS对复旦语料库分词
查看>>
30个非常精美的免费用户界面 PSD 素材资源下载
查看>>
FreeBSD vmstat详解(附例子)
查看>>
实验证明:Objective-C++ 完美支持 ARC
查看>>
Xcopy参数介绍
查看>>
ArcObject GP 所有分析
查看>>
移动通信基础知识
查看>>
Java中有关时间处理的总结
查看>>
android Tab标签下得按钮
查看>>
反序列化笔记
查看>>
Hive的访问接口 | Allen's World
查看>>
MASM的反反汇编技术
查看>>
Login failed for user 'sss'. The user is not associated with a trusted SQL Server connection.
查看>>
字节流与字符流的区别
查看>>
java动态代理
查看>>