【BZOJ1419】 Red is good [期望DP]

news/2024/7/5 6:02:13

Red is good

Time Limit: 10 Sec  Memory Limit: 64 MB
[Submit][Status][Discuss]

Description

  桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元。可以随时停止翻牌,在最优策略下平均能得到多少钱。

Input

  一行输入两个数R,B。

Output

  在最优策略下平均能得到多少钱。输出答案时,小数点后第六位后的全部去掉,不要四舍五入。

Sample Input

  5 1

Sample Output

  4.166666

HINT

  R,B<=5000

Solution

  这显然是一道简单的期望DP。我们令 f[i][j] 表示剩下 i 个红牌和 j 个黑牌时的最优答案。那么显然:

  

  其中 i/(i+j) 和 j/(i+j) 表示选择到的概率。

  最后由于卡内存,我们滚动一下数组即可。

Code

 1 #include<iostream>  
 2 #include<string>  
 3 #include<algorithm>  
 4 #include<cstdio>  
 5 #include<cstring>  
 6 #include<cstdlib>  
 7 #include<cmath>
 8 using namespace std; 
 9 typedef long long s64; 
10  
11 const int ONE = 5001;
12 const int E6 = 1e6;
13  
14 int n,m;
15 double f[2][5001];
16  
17 int get() 
18 {
19         int res=1,Q=1;  char c;
20         while( (c=getchar())<48 || c>57)
21         if(c=='-')Q=-1;
22         if(Q) res=c-48; 
23         while((c=getchar())>=48 && c<=57) 
24         res=res*10+c-48; 
25         return res*Q; 
26 }
27  
28  
29 int main()
30 {
31         n=get();    m=get();
32         for(int i=0,A=0; i<=n; i++,A^=1)
33         {
34             f[A][0] = i;
35             for(int j=0; j<=m; j++)
36                 f[A][j] = max(0.0, (double)i/(i+j) * (f[A^1][j]+1) + (double)j/(i+j) * (f[A][j-1]-1) );
37         }
38         s64 record = floor(f[n&1][m] * E6);
39         printf("%lld.%06lld", record/E6, record%E6);
40 }
View Code

 

转载于:https://www.cnblogs.com/BearChild/p/6651440.html


http://www.niftyadmin.cn/n/3744607.html

相关文章

java switch 用法

switch的case语句可以处理int&#xff0c;short&#xff0c;byte&#xff0c;char类型的值&#xff0c;但是不能处理long&#xff0c;String等类型。因为short&#xff0c;byte&#xff0c;char都会转换成int进行处理&#xff0c;这一点也可以从生成的字节码看出。public class…

数组的定义方法 ---for循环实现九九乘法表

元素类型[] 数组名 new 元素类型[元素个数或数组长] int[] xnew int[3]; public class Jiujiuzhengfa { public static void main(String[] args) { for(int i1;i<9;i){ for(int j1;j<i;j){ System.out.print((j"*"i""j*i)"\t"); } …

【综合实训】图书管理系统——需求规格说明书

【备注】本说明书由华中农业大学2018级计算机科学与技术专业的刘铠铭、崔凌浩、卢家伟三位同学共同完成。 文章目录1 引言1.1 编写目的1.2 背景1.3 术语和缩略词1.4 参考资料2 任务概述2.1 项目概述2.1.1 项目来源及背景2.1.2 项目目标2.1.3 系统功能概述2.2 假定和约束3 功能需…

1~100之间 7的倍数的个数。并打印

2,1~100之间 7的倍数的个数。并打印。 思路&#xff1a; 1&#xff0c;先对1~100进行循环(遍历)通过循环的形式。 2&#xff0c;在遍历的过程中&#xff0c;定义条件。只对7的倍数进行操作。 3&#xff0c;因为7的倍数不确定&#xff0c;只要符合条件&#xff0c;就通过一个变…

Spring -- 注解事务 以及 7个传播行为

注解事务&#xff1a; 1.开启注解事务配置&#xff1a; <!-- 事务管理器 --><bean id"transactionManager" class"org.springframework.orm.hibernate3.HibernateTransactionManager"><property name"sessionFactory" ref"s…

数字图像处理课程设计---基于CNN(卷积神经网络)的医学影像识别

文章目录1.实验背景2.实验目的与意义3.环境搭建与数据集3.1 环境搭建3.2 数据集准备4.实验步骤4.1 初始设置4.2 数据预处理4.3 构建模型4.3.1 卷积层4.3.2 激活函数层4.3.3 池化层4.3.4 Dropout层4.3.5 Flatten层4.3.6 全连接层&#xff08;Dense&#xff09;4.3.7 Softmax4.3.…

Oracle varchar与varchar2的区别

varchar -- 存放定長的字符数据&#xff0c;最长2000個字符&#xff1b;varchar2 -- 存放可变长字符数据&#xff0c;最大长度为4000字符。 varchar2是oracle提供的独特的数据类型oracle保证在任何版本中该数据类型向上和向下兼容但不保证varchar&#xff0c;这是因为varchar是…

【综合实训】图书管理系统——概要设计说明书

【备注】本说明书由华中农业大学2018级计算机科学与技术专业的刘铠铭、崔凌浩、卢家伟三位同学共同完成。 文章目录1 引言1.1 编写目的1.2 范围1.2.1 系统目标1.2.2 主要软件需求1.2.3 软件设计约束、限制1.3 术语和缩略词1.4 参考资料2 体系结构设计2.1 需求复审2.2 软件体系结…