【华为OD】C卷真题:200分 寻找最优的路测线路 JS源码实现【思路+源码】

 Java代码实现:

【华为OD】C卷真题:200分 寻找最优的路测线路 Java源码实现【思路+源码】-CSDN博客

C++代码实现:

【华为OD】C卷真题:200分 寻找最优的路测线路 C/C++源码实现【思路+源码】-CSDN博客

python代码实现:

 【华为OD】C卷真题:200分 寻找最优的路测线路 python源码实现【思路+源码】-CSDN博客

C语言代码实现:

【华为OD】C卷真题:200分 寻找最优的路测线路 C语言源码实现【思路+源码】-CSDN博客

题目描述:

评估一个网络的信号质量,其中一个做法是将网络划分为栅格,然后对每个栅格的信号质量计算。路测的时候,希望选择一条信号最好的路线(彼此相连的栅格集合)进行演示。现给出R行C列的整数数组Cov,每个单元格的数值S即为该栅格的信号质量(已归一化,无单位,值越大信号越好)。

要求从[0, 0]到[R-1, C-1]设计一条最优路测路线。返回该路线得分。

规则:

1.     路测路线可以上下左右四个方向,不能对角。

2.     路线的评分是以路线上信号最差的栅格为准的,例如路径8→4→5→9的值为 4,该线路评分为4。线路最优表示该条线路的评分最高。

输入描述

第一行表示栅格的行数R

第二行表示栅格的列数C

第3行开始,每一行表示栅格地图一行的信号值,如5 4 5

输出描述

最优路线的得分

示例1

输入输出示例仅供调试,后台判题数据一般不包含示例

输入

3
3
5 4 5
1 2 6
7 4 6

输出

4

说明

路线为:5→4→5→6→6

示例2

输入输出示例仅供调试,后台判题数据一般不包含示例

输入

6
5
3 4 6 3 4
0 2 1 1 7
8 8 3 2 7
3 2 4 9 8
4 1 2 0 0
4 6 5 4 3

输出

3

说明

路线为:3→4→6→3→4→7→7→8→9→4→3→8→8→3→4→4→6→5→4→3

备注

1.    1<= R, C <= 20

2.    0<= S <= 65535

     4                                                          
                                                            
              +---+                                               
              |   |                                               
              |   | 3                       3                     
              |   |                                               
              |   +---+                   -----                  + ---+
              | +      |       |            |   |                  +     |----|3
  +         2 | +      |       |          2 |   |     2            +     |    |
  +           | +      |       |            |   |                  +     |    |
  +       +---+ +      |       |        ----+   |   +---+          +     |    |
  +       |     +      |       |        |       |   |   |          +     |    |    ++++++|
  +     1 |     +      | 1     |      1 |       | 1 |   | 1        +     |    |    |     |
  +       |     +      |       |        |       |   |   |          +     |    |    |     |
  +   +---+     +      +---+   |    +---+       +---+   +---+      +     |    |    |     |
  +   |         +          |   |    |                       |      +     |    |    |     |
  + 0 |         +          | 0 |  0 |                       | 0    +     |    |    |     |
  +   |         +          |   |    |                       |      +     |    |    |     |
  +---+         +          +-------+                       +---+  +  +--- |    |+   |     |++
                +                                                      
    0   1   2   3   4   5   6   7   8   9  10  11  12  13  14   15  16  17  18
 

题目解析:

        这个题目使用递归的话,可以找到全部,但是时间复杂度会超时,需要做剪枝处理,或者使用动态规划来处理,也可以达到很好的效果。【还得再优化一下才能满分】

JS代码实现:


const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

function getMmax(rows, cols, vec) {
  let dpArr = new Array(rows);
  for (let i = 0; i < rows; i++) {
      dpArr[i] = new Array(cols);
  }
  dpArr[rows - 1][cols - 1] = vec[rows - 1][cols - 1];

  for (let j = cols - 2; j >= 0; j--) {
      dpArr[rows - 1][j] = Math.min(dpArr[rows - 1][j + 1], vec[rows - 1][j]);
  }

  for (let i = rows - 2; i >= 0; i--) {
      dpArr[i][cols - 1] = Math.min(dpArr[i + 1][cols - 1], vec[i][cols - 1]);
  }

  for (let i = rows - 2; i >= 0; i--) {
      for (let j = cols - 2; j >= 0; j--) {
          dpArr[i][j] = Math.min(Math.max(dpArr[i + 1][j], dpArr[i][j + 1]), vec[i][j]);
      }
  }

  return dpArr[0][0];
}

async function main(){

  let rs = parseInt(await readline());
  let cs = parseInt(await readline());
  let ans = [];
  for( let i=0;i

【华为OD】C卷真题:200分 寻找最优的路测线路 JS源码实现【思路+源码】_第1张图片

你可能感兴趣的:(杂谈,华为od,c语言,javascript,java,python,C++,码蚁软件)