NEYC 2017 自动取款机 atm Day6 T1
【问题描述】
小沈阳在小品里说过:“人生最痛苦的事情是人死了,钱还没花了”。
于是小宋(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的更多相关文章
- 语言模拟ATM自动取款机系统
C语言实验报告 题目名称:C语言模拟ATM自动取款机系统 C语言模拟实现ATM自动取款机功能:输入密码,余额查询,取款,存款,转账,修改密码,退出功能: 代码实现的功能: 账号及密码输入: ...
- [CareerCup] 12.6 Test an ATM 测试一个自动取款机
12.6 How would you test an ATM in a distributed banking system? 这道题问我们如何来测试一个自动取款机,我们首先要询问下列问题: - 谁来 ...
- C#实现ATM自动取款机
本篇用C#实现ATM自动取款机的一些功能.面临的第一个问题是:如何把与自动取款机相关的有形的.无形的方面抽象出来.大致如下: (1)关于用户帐号的类:Account(2)关于银行数据库的类:BankD ...
- 5、原生jdbc链接数据库实例-自动取款机
ATM自动取款机需求 一.登陆 1.界面要求:服务选择 1.老用户登陆:进入后输入卡号密码登陆 2.新用户开户:开户需要输入身份证号,记录姓名,开户时间.然后机器给出卡号,原始密码:111111. 卡 ...
- ATM自动取款机程序感想
上周四的Java考试,老师并没有我们考暑假给我们布置的样卷的java程序,而是让我们做一个设计ATM的程序,然而这个对于我们来说好难,因为暑假没有学好java,首先基础知识还没有掌握,输入数据一开始都 ...
- linux 下用C实现 ATM 自动取款机功能 (进程间通信)
直接先上图: 项目需求: 主要分为两人大模块: 客户端 .进入时的功能开户.销户.登录.解锁 开户:输入姓名.身份证号.设置密码,如果开户成功,则服务器上保存一个账号信号(一个账号存一个文件,文件名建 ...
- 你怎么改造和重新设计一个ATM银行自动取款机
- Google Waymo 2017自动驾驶安全技术报告(一)
2017年10月Google Waymo向美国交通部提交了一份43页的安全报告,报告中详细说明了Waymo如何装备和训练自动驾驶车辆,从而避免驾驶中的一般和意外情况发生.这份报告对Waymo的自动驾驶 ...
- NEYC 2017 游记
day 1: result: sum_rank: 11 school_rank:1 水题在你高估的时候就已经不水了 sum:有个快速乘类似快速幂: int ans=0; ...
随机推荐
- PHP(YII2实现) 微信网页授权
参考地址 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 实现步骤分析: 获取code->access ...
- 014---Django的中间件
前戏 我们在前面的课程中已经学会了给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装 ...
- Python3爬虫(八) 数据存储之TXT、JSON、CSV
Infi-chu: http://www.cnblogs.com/Infi-chu/ TXT文本存储 TXT文本存储,方便,简单,几乎适用于任何平台.但是不利于检索. 1.举例: 使用requests ...
- 2.Linux文件和目录
1. 目录和路径 linux下比较特殊的目录: . 代表此层目录 .. 代表上一层目录 - 代表前一个工作目录 ~ 代表『目前使用者身份』所在的home目录 ~account 代表 account 这 ...
- 自动化测试--封装JDBCUnit
在进行测试的时候,经常需要对数据库进行操作.我们知道,通过代码与数据库交互,需要以下几步: 1.加载驱动 之前有盆友问我,为什么Selenium操作浏览器的时候,非要下载浏览器驱动?为啥对数据库进行操 ...
- C 计算金额
#include <stdio.h> int main(int argc, char **argv) { \\定义两个变量 a金额 z跟票面 int a=0; int z=0;\\ 输入金 ...
- tomcat8编码设置和gc异常解决
用startup.bat启动 编码解决: 用编辑器打开catalina.bat文件找到set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS% " 更改为 se ...
- CCS Font 知识整理总结
总是搞不懂 CCS 中如何正确的使用字体,这下明白了. 1.什么是 font-face font-face 顾名思义,就是文字的脸.字体是文字的外在形式,就是文字的风格,是文字的外衣.比如行书.楷书. ...
- 成为IT精英,我奋斗7年【转】
这些日子 我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没 有方向 ,所以把我的经历写出来与大家共勉,希 ...
- Spring定时器调用Hibernate方法无法获得SessionFactory的解决办法
由于在Spring定时器中无法通过注解的方式获取bean,因此需要通过原生的方式获取.获取session的方式如下: WebApplicationContext wac = ContextLoader ...