每日一题 --- 试题 算法训练 拿金币[蓝桥杯][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] + 该位的金币数目


相关文章
|
1月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
69 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
1月前
|
算法 测试技术 C++
【动态规划算法】蓝桥杯填充问题(C/C++)
【动态规划算法】蓝桥杯填充问题(C/C++)
|
1月前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
蓝桥杯Python编程练习题的集合,涵盖了从基础到提高的多个算法题目及其解答。
60 3
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
|
17天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
1月前
|
机器学习/深度学习 算法 决策智能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
|
1月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
67 2
|
1月前
|
算法 Java C++
【贪心算法】算法训练 ALGO-1003 礼物(C/C++)
【贪心算法】算法训练 ALGO-1003 礼物(C/C++)
【贪心算法】算法训练 ALGO-1003 礼物(C/C++)
|
1月前
|
算法 C++
蓝桥 算法训练 共线(C++)
蓝桥 算法训练 共线(C++)
|
3月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
51 6
|
3月前
|
搜索推荐 算法 Java
经典排序算法之-----选择排序(Java实现)
这篇文章通过Java代码示例详细解释了选择排序算法的实现过程,包括算法的基本思想、核心代码、辅助函数以及测试结果,展示了如何通过选择排序对数组进行升序排列。
经典排序算法之-----选择排序(Java实现)