zoukankan      html  css  js  c++  java
  • 笔试题算法系列(四)百度蘑菇阵

    时间限制:1秒

    空间限制:32768K

    现在有两个好友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
    输出例子1:
    0.50

    分析:动态规划
      
      
    代码如下:
     1 import java.util.Scanner;
     2 
     3 public class Main{
     4     public static void main(String[] args){
     5         Scanner sc = new Scanner(System.in);
     6         String [] line;
     7         while(sc.hasNext()){
     8             line = sc.nextLine().split(" ");
     9             int n = Integer.parseInt(line[0]);
    10             int m = Integer.parseInt(line[1]);
    11             int k = Integer.parseInt(line[2]);
    12             boolean[][] grid = new boolean[n+1][m+1];
    13             double [][] p = new double[n+1][m+1];
    14             for(int i=0; i<k; i++){
    15                 line = sc.nextLine().split(" ");
    16                 int x = Integer.parseInt(line[0]);
    17                 int y = Integer.parseInt(line[1]);
    18                 grid[x][y] = true;
    19             }
    20             for(int i=1; i<n+1; i++){
    21                 for(int j=1; j<m+1; j++){
    22                     if(i==1 && j==1){
    23                         p[i][j] = 1;
    24                         continue;
    25                     }
    26                     if(grid[i][j]){
    27                         p[i][j] = 0;
    28                         continue;
    29                     }
    30                     if(i==n && j ==m){
    31                         p[i][j] = p[i][j-1]+p[i-1][j];
    32                     }else if(i==n){
    33                         p[i][j] = p[i][j-1]+p[i-1][j]*0.5;
    34                     }else if(j==m){
    35                         p[i][j] = p[i][j-1]*0.5 + p[i-1][j];
    36                     }else{
    37                         p[i][j] = p[i][j-1]*0.5 + p[i-1][j]*0.5;
    38                     }
    39                     
    40                 }
    41             }
    42             System.out.println(String.format("%.2f", p[n][m]));
    43         }
    44         sc.close();
    45     }
    46 }
  • 相关阅读:
    python 全栈基础作业题
    计算机基础之二:操作系统的发展史
    计算机基础系列之一:计算机硬件概述
    饼图
    折线图
    win_diy_monkey demo
    csv,Excel
    uiautomator2
    win ui自动化测试
    html
  • 原文地址:https://www.cnblogs.com/haimishasha/p/10637829.html
Copyright © 2011-2022 走看看