• zoj3640 Help Me Escape


    Help Me Escape

    题意:

    某一个人,初始战斗值为f,面临着n条道路,每一条道路有一个困难程度ti,和锻炼值ci。每一天他会等概率地选择一条道路,如果他的战斗值大于ci,那么他会花费ti的天数走出去,否则他走不出去,但是战斗值增加ti。ti和ci的关系满足ti=floor((1+sqrt(5))*0.5*ci*ci) 
    给出n,f,ci,问这个人走出去的期望天数

    ————————————————————————————————

    期望DP

    f[i]:以i的战斗值,几天可以走出

    所有的道路的概率是一样的,那么就是1/n

    所以只要循环判断当前道路是否小于给定战斗值,如果是就增加t[道路]/n

    如果不是则要按照f[i+c[道路]]计算,注意,这需要增加一天!!!

    ————————————————————————————————

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=1e4+10;
     4 int n,m;
     5 double f[maxn*2];
     6 int c[maxn],t[maxn];
     7 int main()
     8 {
     9     while(scanf("%d%d",&n,&m)==2)
    10     {
    11         int mx=0;
    12         memset(f,0,sizeof f);
    13         for(int i=1;i<=n;++i)
    14         {
    15             scanf("%d",&c[i]);
    16             t[i]=floor((1+pow(5,0.5))*c[i]*c[i]/2);
    17             mx=max(c[i],mx);
    18         }
    19         if(mx<m)
    20         {
    21             puts("1.000");
    22             continue;
    23         }
    24         for(int i=mx*2;i>=m;--i)
    25             for(int j=1;j<=n;++j)
    26             {
    27                 if(c[j]<i)f[i]+=t[j]/(double)n;
    28                 else f[i]+=(f[i+c[j]]+1)/(double)n;
    29             }
    30         printf("%.3lf
    ",f[m]);
    31     }
    32     
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    vmware虚拟机Linux(redhat)上用户密码忘记了怎么办?
    redis常见数据类型操作命令
    spring boot自动配置原理
    linux使用xshell连接linux教程
    KafkaRebalance
    kafkaconnect研究
    Kafkarestproxy
    Window Nacos 单机配置与启动
    iptables控制
    在c/c++中输入彩色日志输出,带有带有颜色的打印
  • 原文地址:https://www.cnblogs.com/gryzy/p/14428980.html
Copyright © 2020-2023  润新知