zoukankan      html  css  js  c++  java
  • 2016 Multi-University Training Contest 5

    6/12 

    2016 Multi-University Training Contest 5

    期望+记忆化DP A ATM Mechine(BH)

    题意:

      去ATM取钱,已知存款在[0,K]范围内,每一次输入取出钱的金额,如果大于存款,ATM会发出警报,最多W次,问能在W次内取出所有存款的取款次数的期望值。

    思路:

      设dp[k][w]表示范围存款在[0,k]内,还有w次报警机会的期望值。状态转移方程:

    代码:

    #include <bits/stdc++.h>
    
    const int N = 2e3 + 5;
    const int INF = 0x3f3f3f3f;
    const int D = 16;
    double dp[N][D];
    bool vis[N][D];
    
    double DP(int k, int w) {
        if (k == 0) return 0;
        if (w == 0) return INF;
        if (vis[k][w]) return dp[k][w];
        double &ret = dp[k][w] = INF;
        for (int i=1; i<=k; ++i) {
            ret = std::min (ret, DP (i-1, w-1)*i/(k+1) + DP (k-i, w)*(k-i+1)/(k+1) + 1);
        }
        vis[k][w] = true;
        return ret;
    }
    
    int main() {
        int k, w;
        while (scanf ("%d%d", &k, &w) == 2) {
            printf ("%.6f
    ", DP (k, std::min (w, 15)));
        }
        return 0;
    }
    

      

  • 相关阅读:
    JVM如何执行方法调用
    JVM如何实现反射
    JVM是如何处理异常的
    Java类加载
    windows-Kafka安装
    Google Eventbus简单使用
    队列c#版
    python 元类

    Spring Mvc 笔记二之异常和文件上传
  • 原文地址:https://www.cnblogs.com/NEVERSTOPAC/p/5738171.html
Copyright © 2011-2022 走看看