百度-蘑菇阵

题目描述
现在有两个好友A和B,住在一片长有蘑菇的由n*m个方格组成的草地,A在(1,1),B在(n,m)。现在A想要拜访B,由于她只想去B的家,所以每次她只会走(i,j+1)或(i+1,j)这样的路线,在草地上有k个蘑菇种在格子里(多个蘑菇可能在同一方格),问:A如果每一步随机选择的话(若她在边界上,则只有一种选择),那么她不碰到蘑菇走到B的家的概率是多少?

输入描述:
第一行N,M,K(1 ≤ N,M ≤ 20, k ≤ 100),N,M为草地大小,接下来K行,每行两个整数x,y,代表(x,y)处有一个蘑菇。
输出描述:
输出一行,代表所求概率(保留到2位小数)

示例1
输入
2 2 1
2 1
输出
0.50

// 不能使用:求出无蘑菇时一共又多少种走到的方式,把蘑菇的位置从地图上扣掉 再进行动态规划找有几种方式
// 因为移动到每一格的概率是不同的。
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
        int N = scan.nextInt();
        int M = scan.nextInt();
        int k = scan.nextInt();
        int[][] mushroom = new int[k][2];
        for(int i = 0; i < k; i++){
            mushroom[i][0] = scan.nextInt(); //mushroom用来储存蘑菇的位置
            mushroom[i][1] = scan.nextInt();
        }
        double[][] map = new double[N+1][M+1]; // map储存到达当前位置有几种路线
        for(int[] a : mushroom){
            map[a[0]][a[1]] = -1;
        }
           map[1][1] =1;
            
            for(int i = 1; i <=N ; i++){
                for(int j =1; j <=M; j++){
                    if(map[i][j] != -1){
                        if(map[i-1][j] != -1) 
                            map[i][j] += j==M ? map[i-1][j] : map[i-1][j]/2 ;
                        //这里卡了很久:对于最上面的边来说,它可以选择向下走或者向右走,因此最上边每往右一步,概率都*0.5
                        //对于最右的边来说,它上面的一格没有选择,只能向下移动,因此是上面一格的概率+左边概率*0.5
                        if(map[i][j-1] != -1)
                            map[i][j] += i==N ? map[i][j-1] :  map[i][j-1]/2;
                    }
                }
            }
            
            System.out.printf("%.2f\n",map[N][M]);
            
            
    }
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值