您现在的位置是:主页 > news > app制作网站制作完/百度推广怎么优化关键词的质量
app制作网站制作完/百度推广怎么优化关键词的质量
admin2025/4/30 4:16:25【news】
简介app制作网站制作完,百度推广怎么优化关键词的质量,上海高端做网站,wordpress amp 82111 问题描述 在n*m格木板中放有一些硬币,每格的硬币数目最多为一个,在木板左上方的一个机器人需要收集尽可能多的硬币并把它们带到右下方的单元格。每一步,机器人可以从当前的位置向右移动一格或向下移动一格。当机器人遇到一个有硬币的单元格…
app制作网站制作完,百度推广怎么优化关键词的质量,上海高端做网站,wordpress amp 82111 问题描述 在n*m格木板中放有一些硬币,每格的硬币数目最多为一个,在木板左上方的一个机器人需要收集尽可能多的硬币并把它们带到右下方的单元格。每一步,机器人可以从当前的位置向右移动一格或向下移动一格。当机器人遇到一个有硬币的单元格…
1 问题描述
在n*m格木板中放有一些硬币,每格的硬币数目最多为一个,在木板左上方的一个机器人需要收集尽可能多的硬币并把它们带到右下方的单元格。每一步,机器人可以从当前的位置向右移动一格或向下移动一格。当机器人遇到一个有硬币的单元格时,就会将这枚硬币收集起来。设计一个算法找出机器人能找到的最大硬币数并给出相应的路径。
2 解决方案
2.1 动态规划法
本文编码思想参考自《算法设计与分析基础》第三版,具体如下:
package com.liuzhen.chapter8;public class RobotCoinCollection {//输出找到最大硬币数的路径public void getMaxPath(int[][] A){int rowA = A.length;int columnA = A[0].length; //在数组A最上面一行添加一行元素0,在最左边一列添加一列元素0int[][] changeA = new int[rowA+1][columnA+1]; //初始化,各个元素均为0int[][] maxA = new int[rowA+1][columnA+1]; //用于计算从A[0][0]到达各元素位置收集到的最大硬币数for(int i = 0;i < rowA;i++){for(int j = 0;j < columnA;j++)changeA[i+1][j+1] = A[i][j];}for(int i = 1;i <= rowA;i++){for(int j = 1; j <= columnA;j++){if(maxA[i-1][j] >= maxA[i][j-1])maxA[i][j] = maxA[i-1][j] + changeA[i][j];elsemaxA[i][j] = maxA[i][j-1] + changeA[i][j];}}//输出各个元素位置收集到的最大硬币数System.out.println("各个元素位置收集到的最大硬币数:");for(int i = 1;i <= rowA;i++){for(int j = 1;j <= columnA;j++)System.out.print(maxA[i][j]+"\t");System.out.println();}System.out.println("从左上方到右下方收集到最大硬币数的路径(PS:其中元素为-1 表示行走路径):");maxA[1][1] = 1; //最左上方位置maxA[rowA][columnA] = -1; //最右下方位置int maxI = rowA;int maxJ = columnA;while(maxI >= 1 && maxJ >= 1){if(maxA[maxI][maxJ-1] >= maxA[maxI-1][maxJ]){maxA[maxI][maxJ-1] = -1;maxJ = maxJ - 1;}else{maxA[maxI-1][maxJ] = -1;maxI = maxI - 1;}}for(int i = 1;i <= rowA;i++){for(int j = 1;j <= columnA;j++)System.out.print(maxA[i][j]+"\t");System.out.println();}}public static void main(String[] args){RobotCoinCollection test = new RobotCoinCollection();int[][] A ={{0,0,0,0,1,0},{0,1,0,1,0,0},{0,0,0,1,0,1},{0,0,1,0,0,1},{1,0,0,0,1,0}};test.getMaxPath(A);}
}
运行结果:
各个元素位置收集到的最大硬币数:
0 0 0 0 1 1
0 1 1 2 2 2
0 1 1 3 3 4
0 1 2 3 3 5
1 1 2 3 4 5
从左上方到右下方收集到最大硬币数的路径(PS:其中元素为-1 表示行走路径):
-1 0 0 0 1 1
-1 -1 -1 -1 2 2
0 1 1 -1 -1 -1
0 1 2 3 3 -1
1 1 2 3 4 -1