HDU4870:Rating(DP)「建议收藏」

HDU4870:Rating(DP)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

Problem Description
A little girl loves programming competition very much. Recently, she has found a new kind of programming competition named “TopTopTopCoder”. Every user who has registered in “TopTopTopCoder” system will have a rating, and the initial value of rating equals to zero. After the user participates in the contest held by “TopTopTopCoder”, her/his rating will be updated depending on her/his rank. Supposing that her/his current rating is X, if her/his rank is between on 1-200 after contest, her/his rating will be min(X+50,1000). Her/His rating will be max(X-100,0) otherwise. To reach 1000 points as soon as possible, this little girl registered two accounts. She uses the account with less rating in each contest. The possibility of her rank between on 1 – 200 is P for every contest. Can you tell her how many contests she needs to participate in to make one of her account ratings reach 1000 points?
 


Input
There are several test cases. Each test case is a single line containing a float number P (0.3 <= P <= 1.0). The meaning of P is described above.
 


Output
You should output a float number for each test case, indicating the expected count of contest she needs to participate in. This problem is special judged. The relative error less than 1e-5 will be accepted.
 


Sample Input
   
   
1.000000 0.814700

 


Sample Output
   
   
39.000000 82.181160
由于每次50分,到达1000分,所以能够看做每次1分。到达20分
dp[i]表示i到20的数学期望
那么dp[i] = dp[i+1]*p+dp[i-2]*q+1;
令t[i] = dp[i+1]-dp[i]
则t[i] = (t[i+1]*p+t[i-2]*q)
所以t[i+1] = (t[i]-t[i-2]*q)/p
#include <stdio.h>
int main()
{
    float p,sum,t[21],q;
    int i;
    while(~scanf("%f",&p))
    {
        sum = 0;
        q = 1-p;
        t[0] = 1/p,t[1] = t[0]/p,t[2] = t[1]/p;
        sum = t[0]+t[1]+t[2];
        for(i = 3;i<20;i++)
        {
            t[i] = (t[i-1]-t[i-3]*q)/p;
            sum+=t[i];
        }
        printf("%.6f\n",sum*2-t[19]);
    }
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116723.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关于pycharm下载tensorflow时报错解决「建议收藏」

    关于pycharm下载tensorflow时报错解决「建议收藏」1.查看pip工具是否需要更新2.点击settings,进入pythoninterperter,对pip进行更新3.可以双击上箭头进行更新,也可以点击加号搜索pip进行更新

    2022年8月27日
    3
  • 基于C++、MySQL的图书销售管理系统

    基于C++、MySQL的图书销售管理系统数据库课程设计报告开发环境与开发工具开发语言:C++、MySQL操作系统:macOSMojaveVersion10.14.5开发工具:XcodeIDE、iTerm命令行终端终端环境:iTerm+zsh、Xcode终端调试台MySQLServer版本:5.7.25MySQLCommunityServer(GPL)运行方式:cd到目录下make可完成编译连接,而后直接./bsms即可运行系统需求分析  当今的图书销售行业有数据量大、数据结构复杂、数据变

    2022年6月12日
    27
  • 基于.Net开源框架

    基于.Net开源框架转 https://www.cnblogs.com/hgmyz/p/5313983.html自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就继续补充这篇日志,日积月累,就能形成一个自己的组件经验库。分布式缓存框架:MicrosoftV…

    2022年7月15日
    20
  • 利用MDK软件生成bin文件的简单方法

    利用MDK软件生成bin文件的简单方法一、缘由:之前学习KeilMDK-ARM软件,找了好久生成bin文件的方法,这次分享最简单的,所以写了此篇博文二、操作步骤:1、打开“KeilMDK-ARM软件”-找到魔术棒“Optionsfortarget…”:2、点击“User”选择AfterBulid/Rebuild状态下的“▢Run#1”:3、点击后面的空白处,写入命令,,最后关闭窗口,重新编译软件,即可生成bin文件:4、具体命令如下:命令格式1:fromelf.exe–bin-o“%L@L.

    2022年10月20日
    0
  • 国内机床企业名录

    国内机床企业名录珠江机床有限公司北京第三机床厂北京市机电研究院北京市华德液压泵厂机床厂北京市仪表机床厂北京市电加工机床厂北京市电加工研究所北京阿奇工业电子有限公司中国航天工业总公司二八四厂(北京长峰机械动力厂)北京机床研究所北京良乡锻压机床厂北京市京良机械制造有限公司北京长空机械公司北京北方车辆制造厂十五分厂北京机电研究所北京工业大学科技开发管理部(数控机床配件研究所)北京光电量仪研究中心北京工大光电机械厂北京液

    2022年6月30日
    77
  • 当面试官问你“你期望的薪酬是多少”时,实际上是在问什么?「建议收藏」

    当面试官问你“你期望的薪酬是多少”时,实际上是在问什么?

    2022年2月13日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号