zoukankan      html  css  js  c++  java
  • 笔试面试题-蘑菇阵

    题目描述

    现在有两个好友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(2 ≤ N,M ≤ 20, k ≤ 100),N,M为草地大小,接下来K行,每行两个整数x,y,代表(x,y)处有一个蘑菇。

    输出描述:

    输出一行,代表所求概率(保留到2位小数)

    输入例子:

    2 2 1
    2 1

    输出例子:

    0.50

    思路:一开始用可行路径除以所有路径去做,发现是错的,因为不同路径的概率是不一样的。这题还得用概率进行动态规划。

     1 import java.util.*;
     2 /**
     3  * Created by Jiang on 2016/5/27.
     4  */
     5 public class Solution {
     6     public static void main(String[] args) {
     7         double[][] dp = new double[21][21];
     8         Scanner in = new Scanner(System.in);
     9         while (in.hasNext()) {
    10             int N = in.nextInt();
    11             int M = in.nextInt();
    12             int K = in.nextInt();
    13             for (int i = 0; i < 21; i++) {
    14                 Arrays.fill(dp[i], 0);
    15             }
    16             for (int col = 0; col < K; col++) {
    17                 int x = in.nextInt();
    18                 int y = in.nextInt();
    19                 dp[x][y] = 1;
    20             }
    21             //通过从1开始遍历,省去对第0行,0列的特殊处理。
    22             for (int col = 1; col <= M; col++) {
    23                 for (int row = 1; row <= N; row++) {
    24                     if (dp[row][col] == 1) {
    25                         dp[row][col] = 0;
    26                     }
    27                     //第一个元素
    28                     else if (row == 1 && col == 1) {
    29                         dp[row][col] = 1;
    30                     }
    31                     //最后一个元素
    32                     else if (row == N && col == M) {
    33                         dp[row][col] = dp[row - 1][col] + dp[row][col - 1];
    34                     }
    35                     //最后一行
    36                     else if (row == N) {
    37                         dp[row][col] = 0.5 * dp[row - 1][col] + dp[row][col - 1];
    38                     }
    39                     //最后一列
    40                     else if (col == M) {
    41                         dp[row][col] = dp[row - 1][col] + 0.5 * dp[row][col - 1];
    42                     }
    43                     else {
    44                         dp[row][col] = 0.5 * (dp[row - 1][col] + dp[row][col - 1]);
    45                     }
    46                 }
    47             }
    48             System.out.println(String.format("%.2f", 1.0 * dp[N][M]));
    49         }
    50     }
    51 }
  • 相关阅读:
    【26】多任务学习
    【25】迁移学习
    【24】定位数据不匹配
    【23】不匹配数据划分的偏差和方差;判断问题所在的几个重要参数
    【22】在不同的划分上进行训练和测试
    【21】进行误差分析
    17-----vue-cli脚手架安装和webpack-simple模板项目生成
    15-----修饰符
    14-----表单输入绑定
    12-----指令系统介绍
  • 原文地址:https://www.cnblogs.com/BJUT-2010/p/5536892.html
Copyright © 2011-2022 走看看