HDU 5781 ATM Mechine 多校赛 概率dp
来源:互联网 发布:linux mtp挂载 编辑:程序博客网 时间:2024/05/17 23:37
点击打开链接
已知ATM机中有最多
题解
设当前状态dp[i][j],i为最大钱数,j为剩余报错数,
若i > 0、 j > 0,
则dp[i][j] =
对于k不超过剩余的情况:
dp[i-k][j]:表示i-k钱的时的操作次数的期望;
(i-k+1)/(i+1) 表示 [0,1,......i] 这个区间总共有i+1种拿法 ,(i-k+1) 表示从i块钱中拿走了k块钱 此时区间就变成[0,,....i-k]就只剩下i-k+1种拿法。
(发生的概率)
对于K超过剩余的钱数的情况:
dp[k-1][j-1] K大于剩余的钱数时,一定要由 k-1 钱的时候推出 ,此时浪费了一次机会。
(k)/(i+1) 表示i+1种拿法,k表示在[0......k-1]的区间中有k中机会。(发生的概率)
前一项为k不超过剩余的情况,后一项为超过,1为当前操作的一步。
i = 0时为0, j=0时为无穷大。
复杂度
扩展链接:点击打开链接 鹰蛋acm从《鹰蛋》一题浅析对动态规划算法的优化
#include<bits/stdc++.h>#define LL long longusing namespace std;const int INF = 0x3f3f3f3f;const int MAXN = 2010;double dp[MAXN][20];int main(){ int k, w; for(int i = 1; i < MAXN; i++) dp[i][0] = INF; for(int i = 0; i < 20; i++) dp[0][i] = 0; for(int i = 1; i < MAXN; i++) for(int j = 1; j < 20; j++) { double t = INF; for(int k = 1; k <= i; k++) t = min(t, (i-k+1.0)/(i+1)*dp[i-k][j]+k/(i+1.0)*dp[k-1][j-1]+1); dp[i][j] = t; } while(~scanf("%d%d", &k, &w)) printf("%.6f\n", dp[k][min(w, 11)]); return 0;}
1 0
- HDU 5781 ATM Mechine 多校赛 概率dp
- 【HDU 5781】ATM Mechine(概率DP)
- HDU 5781 ATM Mechine(概率DP)
- HDU 5781 ATM Mechine (概率DP)
- hdu 5781 ATM Mechine 概率(期望)dp
- HDU 5781 ATM Mechine(概率dp)
- HDU 5781 ATM Mechine(概率DP求期望)
- HDU 5781 ATM Mechine (概率dp 求期望最小)
- HDU 5781 ATM Mechine 16多校5 概率dp
- HDU-5781-ATM Mechine-DP
- HDU 5781 ATM Mechine dp
- hdu5781-ATM Mechine 概率DP
- hdu5781 ATM Mechine 概率dp
- HDU5781 ATM Mechine [概率dp]
- Hdu-5781 ATM Mechine(DP)
- HDU 5781 ATM Mechine(dp)
- HDU 5781 ATM Mechine (概率dp)(求最优策略期望)
- HDU 5781 ATM Mechine
- Linux设置静态ip后遇到的问题及其解决方案
- Maven简介和安装配置
- Echarts图表的简单实现
- Effective C++读书笔记---确定对象被使用前已先被初始化
- 别人的大学 ACM进阶指南
- HDU 5781 ATM Mechine 多校赛 概率dp
- 我们聊一聊CountDownLatch
- Unity3D Shader 入门
- MySql(一入门)
- SparkMLlib----数理统计的基本概念
- 三,Cocos2d游戏逻辑架构
- 《Android开发艺术探索》之View的事件体系和工作原理学习笔记
- Qt---多种方式读写二进制文件
- 2016/08/03 面向对象