zoukankan      html  css  js  c++  java
  • ZOJ 3640 Help Me Escape

    期望,$dp$。

    设$dp[i]$为当前战斗力为$i$的情况下,到达目标状态的期望值。倒着推一遍就可以了。

    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    #include<map>
    #include<set>
    #include<queue>
    #include<stack>
    #include<iostream>
    using namespace std;
    typedef long long LL;
    const double pi=acos(-1.0),eps=1e-10;
    void File()
    {
        freopen("D:\in.txt","r",stdin);
        freopen("D:\out.txt","w",stdout);
    }
    template <class T>
    inline void read(T &x)
    {
        char c = getchar();
        x = 0;
        while(!isdigit(c)) c = getchar();
        while(isdigit(c))
        {
            x = x * 10 + c - '0';
            c = getchar();
        }
    }
    
    double dp[25000];
    int n,f,c[15000],mx;
    int t[25000];
    
    int main()
    {
        while(~scanf("%d%d",&n,&f))
        {
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&c[i]);
                mx=max(mx,c[i]);
                t[i]=(int)((1.0+sqrt(5.0))/2.0*c[i]*c[i]);
            }
            memset(dp,0,sizeof dp);
    
            for(int i=mx+1;i<=21000;i++)
                for(int j=1;j<=n;j++) dp[i]+=1.0/n*t[j];
    
            for(int i=mx;i>=f;i--)
            {
                for(int j=1;j<=n;j++)
                {
                    if(i>c[j]) dp[i]=dp[i]+1.0/n*t[j];
                    else dp[i]=dp[i]+1.0/n*(dp[i+c[j]]+1);
                }
            }
    
            printf("%.3f
    ",dp[f]);
        }
        return 0;
    }
  • 相关阅读:
    JAVA中toString方法
    编辑器未包含main类型解决方法
    Ubuntu中设置环境变量详解
    vim中执行shell命令小结
    vim使用手册
    vim命令总结
    如何修改远程桌面连接3389端口
    Linux磁盘与文件系统管理
    文件与文件系统的压缩与打包命令
    Mininet VM设置笔记
  • 原文地址:https://www.cnblogs.com/zufezzt/p/6343621.html
Copyright © 2011-2022 走看看