每日一题 --- 试题 算法训练 拿金币[蓝桥杯][Java]

简介: 每日一题 --- 试题 算法训练 拿金币[蓝桥杯][Java]

题目:

资源限制

时间限制:1.0s 内存限制:256.0MB

问题描述

  有一个N x N的方格,每一个格子都有一些金币,只要站在格子里就能拿到里面的金币。你站在最左上角的格子里,每次可以从一个格子走到它右边或下边的格子里。请问如何走才能拿到最多的金币。

输入格式

 第一行输入一个正整数n。

  以下n行描述该方格。金币数保证是不超过1000的正整数。

输出格式

  最多能拿金币数量。

样例输入

3

1 3 3

2 2 2

3 1 2

样例输出

11

数据规模和约定

  n<=1000

解题代码:

import java.util.Scanner;
public class Main {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int integer = scanner.nextInt();
    int[][] integers = new int[integer + 1][integer + 1];
    for (int i = 1; i <= integer; i++) {
      for (int j = 1; j <= integer; j++) {
        integers[i][j] = scanner.nextInt();
      }
    }
    int[][] sum = new int[integer + 1][integer + 1];
    for (int i = 1; i <= integer; i++) {
      for (int j = 1; j <= integer; j++) {
        if (j ==1) {
          sum[i][j] = sum[i - 1][j] + integers[i][j];
          continue;
        }
        if (i == 1) {
          sum[i][j] = sum[i][j - 1] + integers[i][j];
          continue;
        }
        if (sum[i][j - 1] > sum[i - 1][j]) {
          sum[i][j] = sum[i][j - 1] + integers[i][j];
        } else {
          sum[i][j] = sum[i - 1][j] + integers[i][j];
        }
      }
    }
    System.out.println(sum[integer][integer]);
  }
}

解题思路:

这一题和蓝桥杯的印章非常相似,都是使用动态规划来做(解题思路

使用动态规划(DP)来做,因为这题很显然就是如果想要确定这一位的最大值,就需要上一步的最大值来进行计算,这时候就可以利用二维数组来确定该位的最大值。

如果 在边缘处,有两种情况:

  1. j = 1 :
    这时候 上一步只能是来自上边,即 max[i][j] = max[i-1][j] + 该位的金币数目
  2. i = 1:
    这时候 上一步只能是来自左边,即 max[i][j] = max[i][j-1] + 该位的金币数目

入伙不在边缘处,也有两种情况

  1. 上边的数比较大
    这时候要想该位最大则上一个数来自上方,即 max[i][j] = max[i-1][j] + 该位的金币数目
  2. 左边的数比较大
    这时候要想该位最大则上一个数来自左方,即 max[i][j] = max[i][j-1] + 该位的金币数目


相关文章
|
7天前
|
存储 算法
【C算法】编程初学者入门训练140道(1~20)
【C算法】编程初学者入门训练140道(1~20)
|
6天前
|
搜索推荐 算法 Java
经典排序算法之-----选择排序(Java实现)
这篇文章通过Java代码示例详细解释了选择排序算法的实现过程,包括算法的基本思想、核心代码、辅助函数以及测试结果,展示了如何通过选择排序对数组进行升序排列。
经典排序算法之-----选择排序(Java实现)
|
11天前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
28 6
|
7天前
|
搜索推荐 算法 Java
|
11天前
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
30 2
|
11天前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
25 1
|
11天前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
22 1
|
24天前
knn增强数据训练
【7月更文挑战第27天】
22 10
|
23天前
knn增强数据训练
【7月更文挑战第28天】
15 2
|
2天前
|
算法 搜索推荐
支付宝商业化广告算法问题之基于pretrain—>finetune范式的知识迁移中,finetune阶段全参数训练与部分参数训练的效果如何比较
支付宝商业化广告算法问题之基于pretrain—>finetune范式的知识迁移中,finetune阶段全参数训练与部分参数训练的效果如何比较