• 都市大飙车 UESTC 1652 概率DP


    记录一个障碍数组,用滚动数组优化内存

    因为当前维由上一维转化需要很多判断,所以我们就由当前维推导下一维,这就很好操作了

    状态转移很好想,具体请看代码

    一道很模板化的概率DP,水

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    template<class T> inline void read(T &_a){
        bool f=0;int _ch=getchar();_a=0;
        while(_ch<'0' || _ch>'9'){if(_ch=='-')f=1;_ch=getchar();}
        while(_ch>='0' && _ch<='9'){_a=(_a<<1)+(_a<<3)+_ch-'0';_ch=getchar();}
        if(f)_a=-_a;
    }
    
    int n,m,k;
    double dp[2][30001];
    bool flag,zhangai[1001][30001];
    
    int main()
    {
        read(m); read(k); read(n);
        int p; read(p); dp[0][p]=1;
        for (register int i=1,a,b;i<=k;++i){read(a); read(b); zhangai[b][a]=true;}
        for (register int i=1;i<=n;++i)
        {
            bool nxt=flag^1;
            memset(dp[nxt],0,sizeof(dp[nxt]));
            for (register int v=1;v<=m;++v)
            {
                if(dp[flag][v]==0) continue;
                double tmp=1;
                if(v>1) tmp+=1;
                if(v<m) tmp+=1;
                double gl=1.000000/tmp;
                if(!zhangai[i][v])dp[nxt][v]+=dp[flag][v]*gl;
                if(v>1&&!zhangai[i][v-1]) dp[nxt][v-1]+=dp[flag][v]*gl;
                if(v<m&&!zhangai[i][v+1]) dp[nxt][v+1]+=dp[flag][v]*gl;
            }
            flag=nxt;
        }
        double ans=0;
        for (register int i=1;i<=m;++i) ans+=dp[flag][i];
        printf("%lf",ans);
        return 0;
    }
  • 相关阅读:
    html 简介
    MySQL事务等了解知识
    MySQL—navicat&&练习&&pymysql
    MySQL查询表(一)
    作业
    MySQL约束&&表关系
    mysql数据类型
    初识mysql
    dll 原理解析
    又过了一天
  • 原文地址:https://www.cnblogs.com/jaywang/p/7783529.html
Copyright © 2020-2023  润新知