自动取款机

【问题描述】

小沈阳在小品里说过:“人生最痛苦的事情是人死了,钱还没花了”。

于是小宋(80 岁)决定要将所有的储蓄从 ATM 机中取出花光。 小宋忘记了她有多少存款(银行卡密码她是记得的 2333),这个奇怪的 ATM 不支持查询存款余额功能。小宋知道她存款的唯一信息是存款上限是 K 元,这意味着小宋的存款 x 是 0 到 K 之间的随机整数(包括 K)。

每次小宋都可以尝试从 ATM 中拿出一些钱。 如果她要取的 y 元钱不大于她的存款, ATM 将立即给小宋 y 元。 但如果她的存款小于 y,小宋将收到 ATM 的警告。

如果小宋被警告超过 w 次,那么她将被警方带走,作为小偷。小宋希望取钱次数期望最小。

由于小宋聪明,她总是采取最好的策略。

请计算小宋将所有储蓄从自动取款机中取出期望次数最小值是多少,并不得被警方带走。

【输入格式】

每个测试点包含多组测试数据(最多 10 组)每组测试数据包含两个整数 K,和 W

1≤K,W≤2000

【输出格式】

对于每组测试数据输出取钱次数最小的期望值,舍入到小数点后 6 位。

【样例输入】

1 1

4 2

20 3

【样例输出】

1.000000

2.400000

4.523810

然而她并不知道赵本山说了:“人生最最痛苦的事情是人活着呢钱没了”。。。

这是个悲伤的故事。

这个..期望概率dp我很渣,渣的很
我们不知道的是有多少钱到底,但我们可以通过每次取多少钱来改变期望最小步
首先,我们先确定一下状态,f[i][j]表示在【知道】i为上限时,还剩j次的期望,所以从小到大(因为表示的是表示的一个定值嘛跟后面
没关系的,而且这个不管他准不准,这和题目的描述是一样的)
蓝后,for(int v=1;v<=i;v++)
             f[i][j]=Min(f[i][j],(i+1-v)/1.0/(i+1)*f[i-v][j]+v/1.0/(i+1)*f[v-1][j-1]+1.0);
这才一半不到,重要的是,老太太很精每个状态都是最佳的所以他当然以最小的代价来知道当前多少为上限,就算是准确知道,也不过是
用log2 2000的次数来知道我到底有多少,所以知道i时j最多到10就不再改变,也就是说把两千看成10位二进制来一位一位的取再有你看这
些状态都是确定的,和数据无关,所以我们就先泡一遍2000*2000之后就高枕无忧了

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 2001
using namespace std;
typedef double D;
D f[MAXN][];
int k,m;
inline D Min(D x,D y){return x<y?x:y;}
int main()
{
//freopen("atm.in","r",stdin);
//freopen("atm.out","w",stdout);
for(int i=;i<=;i++)
for(int j=;j<=;j++)
f[i][j]=1e10;
for(int i=;i<=;i++)
f[][i]=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
for(int v=;v<=i;v++)
f[i][j]=Min(f[i][j],(i+-v)/1.0/(i+)*f[i-v][j]+v/1.0/(i+)*f[v-][j-]+1.0);
while(scanf("%d%d",&k,&m)==)
{
m=<m?:m;
printf("%.6lf\n",f[k][m]);
}
}

NEYC 2017 自动取款机 atm Day6 T1的更多相关文章

  1. 语言模拟ATM自动取款机系统

    C语言实验报告       题目名称:C语言模拟ATM自动取款机系统 C语言模拟实现ATM自动取款机功能:输入密码,余额查询,取款,存款,转账,修改密码,退出功能: 代码实现的功能: 账号及密码输入: ...

  2. [CareerCup] 12.6 Test an ATM 测试一个自动取款机

    12.6 How would you test an ATM in a distributed banking system? 这道题问我们如何来测试一个自动取款机,我们首先要询问下列问题: - 谁来 ...

  3. C#实现ATM自动取款机

    本篇用C#实现ATM自动取款机的一些功能.面临的第一个问题是:如何把与自动取款机相关的有形的.无形的方面抽象出来.大致如下: (1)关于用户帐号的类:Account(2)关于银行数据库的类:BankD ...

  4. 5、原生jdbc链接数据库实例-自动取款机

    ATM自动取款机需求 一.登陆 1.界面要求:服务选择 1.老用户登陆:进入后输入卡号密码登陆 2.新用户开户:开户需要输入身份证号,记录姓名,开户时间.然后机器给出卡号,原始密码:111111. 卡 ...

  5. ATM自动取款机程序感想

    上周四的Java考试,老师并没有我们考暑假给我们布置的样卷的java程序,而是让我们做一个设计ATM的程序,然而这个对于我们来说好难,因为暑假没有学好java,首先基础知识还没有掌握,输入数据一开始都 ...

  6. linux 下用C实现 ATM 自动取款机功能 (进程间通信)

    直接先上图: 项目需求: 主要分为两人大模块: 客户端 .进入时的功能开户.销户.登录.解锁 开户:输入姓名.身份证号.设置密码,如果开户成功,则服务器上保存一个账号信号(一个账号存一个文件,文件名建 ...

  7. 你怎么改造和重新设计一个ATM银行自动取款机

  8. Google Waymo 2017自动驾驶安全技术报告(一)

    2017年10月Google Waymo向美国交通部提交了一份43页的安全报告,报告中详细说明了Waymo如何装备和训练自动驾驶车辆,从而避免驾驶中的一般和意外情况发生.这份报告对Waymo的自动驾驶 ...

  9. NEYC 2017 游记

    day 1:  result:    sum_rank: 11   school_rank:1   水题在你高估的时候就已经不水了   sum:有个快速乘类似快速幂:       int ans=0; ...

随机推荐

  1. python中的数据类型之元组和字典

    一.元组:俗称不可变的列表,又被称为只读列表.元组用小括号括起来,里面可以放任何数据类型的数据,查询可以,循环也可以,切片也可以,但就是不能修改. 注意:如果元组中只有一个元素,一定要加一个逗号,否则 ...

  2. uva 508 - Morse Mismatches(摩斯码)

    来自https://blog.csdn.net/su_cicada/article/details/80084529 习题4-6 莫尔斯电码(Morse Mismatches, ACM/ICPC Wo ...

  3. 初步学习pg_control文件之十一

    接前文  初步学习pg_control文件之十,再看这个 XLogRecPtr prevCheckPoint; /* previous check point record ptr */ 发生了che ...

  4. Android ANR 分析

    首先贴一下trace 文件 Process: com.oppo.reader PID: 20358 Time: 2933175644_1545041895232 Flags: 0x38d83e44 P ...

  5. 白话HMM系列1——从一个缩略语还原的例子说起

    HMM到底是一个什么样的东西,我想从我研究的一个应用场景开始说起.之所以想重新描述一下我对HMM的理解,是因为上次面试百度糯米的时候,自己没有把HMM在应用上说的很明白,不过糯米的那位郑姓面试官我也是 ...

  6. web端常见兼容性问题整理

    一.html和css 各浏览器的默认内外边距不一致问题 最明显的是ul标签内外边距问题,ul标签在IE-7中,有个默认的外边距,但是在IE8以上及其他浏览器中有个默认的内边距. 解决办法:*{marg ...

  7. 【廖雪峰老师python教程】——模块

    使用模块 任何模块代码的第一个字符串都被视为模块的文档注释: 使用__author__变量把作者写进去,这样当你公开源代码后别人就可以瞻仰你的大名: 当我们在命令行运行模块文件时,Python解释器把 ...

  8. 「日常训练」 Soldier and Traveling (CFR304D2E)

    题意 (CodeForces 546E) 对一个无向图,给出图的情况与各个节点的人数/目标人数.每个节点的人只可以待在自己的城市或走到与他相邻的节点. 问最后是否有解,输出一可行解(我以为是必须和答案 ...

  9. CCF-NOIP-2018 提高组(复赛) 模拟试题(五)

    T1 相遇 [问题描述] 在一场奇怪的梦里,小 Y 来到了一个神奇的国度.这个国度可以用一根数轴表示,小 Y 在 N 处,而小 Y 想吃的美食在 K 处.小 Y 有两种方式移动, 一种叫做步行, 一种 ...

  10. Tomcat突然用开发工具启动不起来,只报了个红色的警告,没有其他任何异常

    碰到这个问题是,是因为我的catalina.bat文件做了配置修改,导致与工具这边的启动设置起了冲突 下面这个是我在Catalina.bat中新增的配置,删掉这个就可以了 set JAVA_OPTS= ...