码迷,mamicode.com
首页 > 其他好文 > 详细

$\text{2020.03.14 Preliminaries for BAPC 2019 }$解题报告

时间:2020-03-15 19:05:01      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:大于   inline   c++   style   apc   begin   namespace   std   题解   

\(\text{D. Deceptive Dice}\)

\(\text{I. }\)题意

你有一个 \(n\) 个面的骰子,各面分别有 \(1,2,\cdots,n\) 点;一开始你转动骰子,然后你有两个选择:

  • 让骰子停止转动;
  • 重新转动骰子.

你最多可以转动 \(k\) 次骰子,你的得分为让骰子停止后骰子的点数,求分数的期望值.

\(\text{II. }\)题解

一开始转动骰子,期望值显然是:\(\displaystyle\frac{1+2+3+\cdots +n}{n}\),记作\(\ E_1\)

我们认为期望一定是最优的策略,所以下一次转动骰子的期望分为两部分:

  • 点数小于等于上一次的期望值,那么这时认为最优的策略是停下,期望为:\(\displaystyle\frac{\lfloor E_1\rfloor\cdot E_1}{n}\)
  • 点数大于上一次的期望值,认为继续转是最优的策略,期望:\(\displaystyle\frac{\lfloor E_1\rfloor+1+\lfloor E_1\rfloor+2+\cdots+n}{n}\ .\)

所以转移就是:\(\ E_i=\left\{\begin{array}{l}\displaystyle\frac{1}{n}\left(\displaystyle\lfloor E_{i-1}\rfloor\cdot E_{i-1}+\sum_{k=\lfloor E_{i-1}\rfloor+1}^{n}k\right)\ ,\ i>1\ ; \\ \displaystyle \frac{1}{n}\sum_{k=1}^{n}k=\frac{n+1}{2}\ ,\ i=1\ . \end{array}\right.\)

\(\text{III. }\)代码

#include<bits/stdc++.h>
using namespace std;

int main()
{
    double n,ans=0,t=0;
    int k;
    cin>>n>>k;
    while(k--)
    {
        ans=(ans*t+n*(n+1)/2-t*(t+1)/2)/n;
        t=floor(ans);
    }
    printf("%.9f\n",ans);
    return 0;
}

$\text{2020.03.14 Preliminaries for BAPC 2019 }$解题报告

标签:大于   inline   c++   style   apc   begin   namespace   std   题解   

原文地址:https://www.cnblogs.com/DariusOrz/p/12499155.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!