题意翻译
你收到的礼物是一个非常聪明的机器人,行走在一块长方形的木板上。不幸的是,你知道它是坏的,表现得相当奇怪(随机)。该板由n行和m列的单元格组成。机器人最初是在i行和j j列的某个单元格上。然后在每一步机器人可以到另一个单元。目的是去底层(n次)行。机器人可以停留在当前单元,向左移动,向右边移动,或者移动到当前下方的单元。如果机器人在最左边的列不能向左移动,如果它是在最右边的列不能向右移动。在每一步中,所有可能的动作都是同样可能的。返回步的预期数量达到下面的行。
一道好好地高斯消元被打成了暴力……
不难看出这是一个环形后效性的dp
然而我并不会……
于是抄打了个暴力,就是每一层在转移的时候多转移几次……
竟然过了……
虽然跑得很慢……但代码很短啊……
1 //minamoto 2 #include<cstdio> 3 const int N=1005; 4 double dp[N][N],d[N]; 5 int n,m,a,b; 6 int main(){ 7 scanf("%d%d%d%d",&n,&m,&a,&b); 8 for(int i=1;i<=m;++i){ 9 d[i]=2; 10 if(i>1) ++d[i];if(i<m) ++d[i]; 11 } 12 for(int i=a+1;i<=n;++i) 13 for(int t=0;t<100;++t) 14 for(int j=1;j<=m;++j){ 15 double Q=dp[i][j-1]+dp[i][j]+dp[i-1][j]+dp[i][j+1]; 16 dp[i][j]=1.0+Q/d[j]; 17 } 18 printf("%.10lf\n",dp[n][b]); 19 return 0; 20 }
原文地址:https://www.cnblogs.com/bztMinamoto/p/9792491.html
时间: 2024-10-10 10:33:59