zoukankan      html  css  js  c++  java
  • 【BZOJ 1419】1419: Red is good (概率DP)

    1419: Red is good

    Time Limit: 10 Sec  Memory Limit: 64 MB
    Submit: 807  Solved: 343

    Description

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

    Input

    一行输入两个数R,B,其值在0到5000之间

    Output

    在最优策略下平均能得到多少钱。

    Sample Input

    5 1

    Sample Output

    4.166666

    HINT

    输出答案时,小数点后第六位后的全部去掉,不要四舍五入.

    Source

    【分析】

      概率DP这种东西想清楚就没问题。

      f[i][j]表示已经翻了i红j黑,之后最优策略下的期望得分。

      因为直接n^2数组0msT了,所以滚动了一下。

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<iostream>
     5 #include<algorithm>
     6 #include<cmath>
     7 using namespace std;
     8 #define Maxn 5010
     9 
    10 double f[2][Maxn];
    11 
    12 double mymax(double x,double y) {return x>y?x:y;}
    13 
    14 int main()
    15 {
    16     int n,m;
    17     scanf("%d%d",&n,&m);
    18     f[n&1][m]=0;
    19     for(int i=n;i>=0;i--)
    20     {
    21         int p=i&1,pp=p^1;
    22         for(int j=m;j>=0;j--)
    23         {
    24              if(n==i) f[p][j]=mymax(f[p][j+1]-1,0);
    25              else if(m==j) f[p][j]=mymax(f[pp][j]+1,0);
    26              else f[p][j]=mymax((f[pp][j]+1)*(n-i)/(n+m-i-j)+(f[p][j+1]-1)*(m-j)/(n+m-i-j),0);
    27         }
    28     }
    29     printf("%.6lf",f[0][0]-0.0000005);
    30     return 0;
    31 }
    View Code

    2017-04-21 16:08:56

  • 相关阅读:
    【数据大屏设计】有点意思
    MySQL环境搭建
    关于MySQL数据库
    zip-gzip-bzip2_压缩文件
    Linux的链接文件-ln命令
    电脑为什么越用越慢
    按下开机键,计算机背后的故事
    Windows最全快捷键
    环境搭建-VMware安装系统
    wee hours
  • 原文地址:https://www.cnblogs.com/Konjakmoyu/p/6744051.html
Copyright © 2011-2022 走看看