首页 > 编程语言 >数字三角形 —— java蓝桥杯(简单)

数字三角形 —— java蓝桥杯(简单)

时间:2023-01-02 17:15:05浏览次数:29  
标签:java Scanner int 蓝桥 new 三角形 100

题目描述

上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。

输入描述

输入的第一行包含一个整数 N\ (1 \leq N \leq 100)N (1≤N≤100),表示三角形的行数。

下面的 NN 行给出数字三角形。数字三角形上的数都是 0 至 100 之间的整数。

输出描述

输出一个整数,表示答案。

输入输出样例

示例

 

 

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int[][] arr = new int[N][N];
        int[][] dp = new int[N][N];
        for(int i=0;i<N;i++) {
            for(int j=0;j<=i;j++) {
                arr[i][j] = sc.nextInt();    //设置每行依次按行数接收数字个数
            }
        }                                    //接收输入的数字三角形
        sc.close();
        dp[0][0] = arr[0][0];
        for(int i=1;i<N;i++) {                //为什么要从1开始?
            dp[i][0] = dp[i-1][0] + arr[i][0];        //为什么要相加啊? 将第一列之和存储到一个二维数组的第一列
        }
        for(int i=1;i<N;i++) {                //之所以从1开始,是因为入口只有一个 
            for(int j=1;j<=i;j++) {
                dp[i][j] = arr[i][j] + Math.max(dp[i-1][j], dp[i-1][j-1]);        //Math.max(数组) 筛选出数组中最大的数字并返回   
                                                //为什么会有dp[i][j]=arr[i][j]+Math.max(dp[i-1][j],dp[i-1][j-1])选取上一排最大的邻接最大的数
            }
        }
       //为什么不能将dp【0】【0】与其他合在一起? 因为要返回上一层 dp【i-1】【j-1】会超出数组范围出现dp【-1】【-1】
       //怎么解决向左下和右下走的次数相差不能超过1? 数字三角形 入口 —— 出口 奇数取中间 偶数取中间两个数最大值
        if(N%2!=0) {
            System.out.println(dp[N-1][N/2]);        //为什么输入层数为奇数时 此为最大和? 【(奇数 / 2)取小】
        }else {
            System.out.println(Math.max(dp[N-1][N/2], dp[N-1][N/2-1]));
        }
    }
}

 

标签:java,Scanner,int,蓝桥,new,三角形,100
From: https://www.cnblogs.com/mcpf/p/17020167.html

相关文章

  • 大学生入门到精通JAVA系列(一)大学生在哪里写技术博客
    简书知乎专栏GithubPage当然也可以自己建站。 以上是我知道并且大部分写过的博客地址,今天先在这列一下,后续补充完善下各自优缺点。如果有感觉不错的技术博客可以在评论留......
  • java课程加分
      TRANSLATEwithxEnglishArabicHebrewPolishBulgarianHindiPortugueseCatalanHmongDawRomanianChineseSimplifiedHungarianRuss......
  • 第2章:Java语言概述
    软件开发介绍软件概念:软件,即一系列按照特定顺序组织的计算机数据和指令的集合。有系统软件(操作系统)和应用软件(应用程序)之分。人机交互方式:a、图形化界面(GraphicalUser......
  • 【Java】垃圾回收机制
    原文链接:https://blog.csdn.net/qq_40479372/article/details/126743899 Java垃圾回收机制垃圾回收(GC,GarbageCollection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在......
  • JavaScript 数组-概念,创建数组,遍历数组,新增元素
    JavaScript数组-概念,创建数组,遍历数组,新增元素目录JavaScript数组-概念,创建数组,遍历数组,新增元素1.数组的概念2.创建数组2.1数组的创建方式2.2利用new创建数组2.......
  • 狂神说Java(零基础) Java入门笔记
    1.Java帝国的诞生​1972年C诞生,比1995年诞生的Java早了20多年。C贴近硬件,运行极快,效率极高,用于操作系统、编译器、数据库、网络系统等,但是在指针和内存管理方面,常常让程序......
  • JavaScript原型与原型链
    面向对象在讲原型之前必须要将js与面向对象与之区分,之前我一直用面向对象的思想在往js上套,所以导致很多东西绞尽脑汁都没想明白,听人一句劝少走点弯路吧!......
  • JavaScript 流程控制-循环for,while,do-while
    JavaScript流程控制-循环目录JavaScript流程控制-循环1.循环2.for循环2.1语法结构2.2for循环重复相同的代码2.3for循环重复不相同的代码3.双重for循环3.1......
  • 【Java自动化测试】-Mock操作详解
    一、moco框架下载地址:https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/1.3.0/moco执行:java-jar./moco-runner-1.3.0-standalone.jarhttp-p8888......
  • JavaScript 流程控制-分支if,三元,Switch
    JavaScript流程控制-分支目录JavaScript流程控制-分支1.流程控制2.顺序流程控制3.分支流程控制if语句3.1分支结构3.2if语句3.3ifelse语句(双分支语句)3.4ife......