zoukankan      html  css  js  c++  java
  • lightoj 1030-B

    题意:有一个直线的金矿,每个点有一定数量的金子;你从0开始,每次扔个骰子,扔出几点就走几步,

    然后把那个点的金子拿走;如果扔出的骰子超出了金矿,就重新扔,知道你站在最后一个点;问拿走金

    子的期望值是多少;

    很明显如果当前位置为i那么他可以到达的位置为min(n,i~i+6)所以从i点开始获得金子的期望值就是

    Ei=E(i+1)/6+E(i+2)/6+E(i+3)/6+E(i+4)/6+E(i+5)/6+E(i+6)/6,当然i+6>n时再考虑一下。

    于是便可以倒着推到E1,那么E1就是所求的答案。

    想必有人会有疑问为什么不能是Ei=E(i-1)/6+E(i-2)/6+E(i-3)/6+E(i-4)/6+E(i-5)/6+E(i-6)/6

    这样呢?

    由于这题要求是一定要从1开始的收集金子的期望值,所以这样不行,这样不能满足一定是从1开始的。

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    int a[110];
    double dp[110];
    int main() {
        int t;
        cin >> t;
        int ans = 0;
        while(t--) {
            ans++;
            int n;
            cin >> n;
            for(int i = 1 ; i <= n ; i++) {
                cin >> a[i];
            }
            memset(dp , 0 , sizeof(dp));
            dp[n] += (double)a[n];
            for(int i = n - 1 ; i >= 1 ; i--) {
                dp[i] += (double)a[i];
                int len = min(n - i , 6);
                for(int j = i + 1 ; j <= i + 6 && j <= n ; j++) {
                    dp[i] += dp[j] / len;
                }
            }
            cout << "Case " << ans << ": ";
            printf("%.7lf
    " , dp[1]);
        }
        return 0;
    }
    
  • 相关阅读:
    慢性肾炎患者的家庭养护
    中国居民五谷膳食指南
    第二单元丨对环境的察觉
    一个人是否靠谱,闭环很重要
    打赢营销胜仗
    治本修身──中醫內分泌調節養生法
    理想的激励
    卓越演讲:打动听众必知必会的策略和方法(原书第3版)
    每日一题_191008
    每日一题_191007
  • 原文地址:https://www.cnblogs.com/TnT2333333/p/6165121.html
Copyright © 2011-2022 走看看