首页 > 其他 > 详细

CodeForces - 24D :Broken robot (高斯消元 随机)

时间:2019-05-12 12:07:26      阅读:119      评论:0      收藏:0      [点我收藏+]

pro:给定N*M的矩阵,以及初始玩家位置。 规定玩家每次会等概率的向左走,向右走,向下走,问走到最后一行的期望。保留4位小数。

sol:可以列出方程,高斯消元即可,发现是三角矩阵,O(N^2)。  也可以用反复逼近答案。 反复做,dp[i][j]=(dp[i][j+1]+dp[i][j-1]+dp[i][j]+dp[i-1][j])/d[j]+1.0  为了使逼近效果更好,我每次先左一次,再右一次。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=1010;
double dp[maxn][maxn]; int d[maxn];
int main()
{
    int N,M,x,y;
    scanf("%d%d%d%d",&N,&M,&x,&y);
    rep(i,1,M){
        d[i]=2;
        if(i>1) d[i]++;
        if(i<M) d[i]++;
    }
    rep(i,x+1,N){
        rep(t,1,20){
            rep(j,1,M) dp[i][j]=(dp[i][j+1]+dp[i][j-1]+dp[i][j]+dp[i-1][j])/d[j]+1.0;
            for(int j=M;j>=1;j--) dp[i][j]=(dp[i][j+1]+dp[i][j-1]+dp[i][j]+dp[i-1][j])/d[j]+1.0;
        }
    }
    printf("%.10lf\n",dp[N][y]);
    return 0;
}

 

CodeForces - 24D :Broken robot (高斯消元 随机)

原文:https://www.cnblogs.com/hua-dong/p/10851746.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!