zoukankan      html  css  js  c++  java
  • CF 24D Broken robot

    https://codeforces.com/problemset/problem/24/D

    题目

    有个N*M的棋盘上面放了一个机器人,坐标为$(i,j)$。这个机器人会从向左、向右、向下、不移动四种命令中选择执行,当处于最左端时不选择向左命令,最右端时不选择向右命令,每次都会等概率地选择可以选择的命令之一。问期望执行多少条命令可以到达最低端。

    1 ≤ N, M ≤ 1000

    题解

    设dp[i][j]为从(i,j)到最低端执行命令条数的期望,那么

    当宽度>=2时

    [dp[i][1]=frac{1}{3}(dp[i][1]+dp[i+1][1]+dp[i][2])+1]

    [dp[i][m]=frac{1}{3}(dp[i][m]+dp[i+1][m]+dp[i][m-1])+1]

    [dp[i][k]=frac{1}{4}(dp[i][k]+dp[i+1][k]+dp[i][k+1]+dp[i][k-1])+1,quad 1<k<m]

    如果把dp[i+1][t]看作已知数,那么就有m个方程,m个未知数,可以用高斯消元得到dp[i][t]的值

    这样的转移会执行n-i次

    当宽度==1时

    [dp[i][1]=frac{1}{2}(dp[i+1][1]+dp[i][1])+1]

    得到

    [dp[i][1]=dp[i+1][1]+2]

    AC代码

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #define REP(i,a,b) for(register int i=(a); i<(b); i++)
    #define REPE(i,a,b) for(register int i=(a); i<=(b); i++)
    #define PERE(i,a,b) for(register int i=(a); i>=(b); i--)
    using namespace std;
    typedef long long ll;
    int n,m,x,y;
    double a[1007][1007];
    double dp[1007];
    int main() {
    	scanf("%d%d", &n, &m);
    	scanf("%d%d", &x, &y);
    	memset(a,0,sizeof a);
    	memset(dp,0,sizeof dp);
    	if(m>1) {
    		REP(_,x,n) {
    			a[1][1]=2.0/3; a[1][2]=-1.0/3; a[1][m+1]=dp[1]/3+1;
    			a[m][m-1]=-1.0/3; a[m][m]=2.0/3; a[m][m+1]=dp[m]/3+1;
    			REP(i,2,m) {
    				a[i][i-1]=-1.0/4; a[i][i]=3.0/4; a[i][i+1]=-1.0/4; a[i][m+1]=dp[i]/4+1;
    			}
    			a[1][2]/=a[1][1]; a[1][m+1]/=a[1][1]; a[1][1]=1;
    			REPE(i,2,m) {
    				a[i][i]-=a[i-1][i]*a[i][i-1];
    				a[i][m+1]-=a[i-1][m+1]*a[i][i-1];
    				double t=1.0/a[i][i];
    				a[i][i]=1;
    				a[i][m+1]*=t;
    				if(i==m) break;
    				a[i][i+1]*=t;
    			}
    			PERE(i,m-1,1) {
    				a[i][m+1]-=a[i][i+1]*a[i+1][m+1];
    			}
    			REPE(i,1,m) dp[i]=a[i][m+1];
    		}
    		printf("%.10lf
    ", dp[y]);
    	} else {
    		double ans=(n-x)*2;
    		printf("%.10lf
    ", ans);
    	}
    	
    	return 0;
    }
    
  • 相关阅读:
    ufw防火墙设置
    [从0到1搭建ABP微服务]
    .Net Core CI/CD环境搭建(正式版)
    [Abp vNext微服务实践]
    [Abp vNext微服务实践]
    [Abp vNext微服务实践]
    [Abp vNext微服务实践]
    [Abp vNext微服务实践]
    [Abp vNext微服务实践]
    [Abp vNext微服务实践]
  • 原文地址:https://www.cnblogs.com/sahdsg/p/12499087.html
Copyright © 2011-2022 走看看