问题描述:

在数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。
路径上的每一步都只能往左下或 右下走。只需要求出这个最大和即可,不必给出具体路径。
三角形的行数大于1小于等于100,数字为 0 - 99输入格式:
输入格式:
5 //表示三角形的行数
接下来输入三角形
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
要求输出最大和

思路分析:

大致分为两种解决方法,一种是自上而下的解决,也就是使用dfs,穷尽所有情况,因为其中存在重叠子问题,故可以使用备忘录法进行解决。另一种是使用自下而上的方法,逐步的推导出结果,我们可以从最底层开始算起,让后逐步向上移动,在这个过程中,因为以前的数据无后座行,故可以使用一维滚动dp数组来进行计算,最终返回dp[0]即可。

具体见代码注释:

import java.util.Arrays;
import java.util.Scanner;
public class Szsjx {//数字三角形static int solve(int[][] b, int i, int j, int[][] c)//记忆型递归dfs{if (i == b.length || j == b.length) return 0;//递归出口if (c[i][j] >= 0) return c[i][j];//先进行记忆数组查询int temp = Math.max(b[i][j] + solve(b, i + 1, j, c), b[i][j] + solve(b, i + 1, j + 1, c));c[i][j] = temp;//存入记忆数组return temp;}static int dp(int[][] b)//动态规划解法{int row=b.length-1;//行数-1int con=b[row].length-1;//列数-1int []dp=new int[con+1];//形成dp滚动数组for (int i = 0; i <dp.length ; i++) {//初始化一维滚动数组dp[i]=b[row][i];}for (int i = row-1; i >=0 ; i--) {//更改一维滚动数组for (int j = 0; j <=i ; j++) {dp[j]=b[i][j]+Math.max(dp[j],dp[j+1]);}}return dp[0];//返回dp【0】}public static void main(String[] args) {Scanner a=new Scanner(System.in);int n=a.nextInt();//输入对应的行数int b[][]=new int[n][n];//数字三角形的输入int [][]c=new int[n][n];//记忆数组for (int i = 0; i <n ; i++) {//数组初始化Arrays.fill(c[i],-1);}for (int i = 0; i <n ; i++) {//数字三角形输入for (int j = 0; j <=i ; j++) {b[i][j]=a.nextInt();}}System.out.println("备忘录法结果");System.out.println(solve(b,0,0,c));System.out.println("备忘录数组");for (int i = 0; i < n; i++) {//输出备忘录数组System.out.println(Arrays.toString(c[i]));}System.out.println("动态规划结果");System.out.println(dp(b));}
}

运行结果如下:

数字三角形(java)相关推荐

  1. 蓝桥杯数字三角形java,蓝桥杯数字三角形(java)

    题目要求: 问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●1<三角形行 ...

  2. 蓝桥杯 2020省赛 数字三角形 java

    分析 此题和https://blog.csdn.net/weixin_51995229/article/details/123165388这个题很相似,可以参考后看下面的 只不过比上个题多加了个条件: ...

  3. 蓝桥杯-数字三角形 (java)

    算法训练 数字三角形 时间限制:1.0s 内存限制:256.0MB问题描述(图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路径,使该路径所经过的数字的总和最大.●每一步可沿 ...

  4. 数字三角形的显示 java

    数字三角形的显示 java 实现一行符号的输出 public class line {public static void main(String[] args) {// 实现输出一行符号的功能int ...

  5. java 蓝桥杯算法训练 数字三角形(题解)

    试题 算法训练 数字三角形 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的 ...

  6. java 数字三角形

    1. 实践题目 7-1 数字三角形 2. 问题描述 给定一个由 n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过 ...

  7. 用java解决数字三角形问题(动态规划)

    问题描述:试设计一个算法,计算出从三角形的顶到底的一条路径,使该路径经过的数字总和最大,输出最大值和具体路径. 算法构思:采用动态规划的方法自底向上求解较大值,并将每次求的的值保存到一个二维数组中,该 ...

  8. 蓝桥杯 Java试题 H: 数字三角形

    大家关注微信公众号 罡罡同学 回复蓝桥杯 可免费获得历年真题和C语言版的真题源代码 Java试题 H: 数字三角形 4 5 2 6 5 [样例输出] 27 import java.util.Scann ...

  9. 蓝桥杯———数字三角形(JAVA)

    题目: 上图给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径.对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和. 路径上的每一步只能从一个数走到下一层和它最近的左 ...

最新文章

  1. php dedecms 记录访问者ip,dedecms实现显示访问者ip地址的方法
  2. 23万小鹏P7,到底够不够格PK国产特斯拉
  3. lightgbm中的feval参数使用明细
  4. ubuntu 14.04 编译android4.0 出现gcc-version.sh: line 11: cc: command not found错误解决方法
  5. wampserver无法打开http://127.0.0.1/
  6. netbeans6.8_NetBeans IDE 8.0和Java 8的新功能
  7. 局域网ARP病毒的清理
  8. 太大如何翻页固定表头_外行学 Python 爬虫 第六篇 动态翻页
  9. 写于公元2006年2月14日
  10. qemu前后端features协商过程分析(vhost_user后端)
  11. 斯特灵公式求阶乘c语言,斯特林公式求阶乘
  12. vs 编译nmake工程
  13. FPGA音频录音,WM8731音频采集存储DDR3,基于米联客FDMA实现
  14. 腾讯web引用skey g_tk bkn和日期显示分析
  15. 《东周列国志》第七十三回 伍员吹箫乞吴市 专诸进炙刺王僚
  16. 华为HCNA路由与交换eNSP实战(2)负载分担和路由备份
  17. android 图片手动放大,Android图片的手动放大缩小
  18. Java并发编程系列18:多线程之生产者和消费者模式_信号灯法(wait/notify通知机制)
  19. 两种方法编写圆的周长和面积
  20. dockers安装redis

热门文章

  1. ER Win 的官方下载地址
  2. 2022年度《福布斯旅游指南》公布,123家中国酒店上榜 | 美通社头条
  3. python画图,点赞
  4. 李弘毅机器学习笔记:第十章:Keras2.0
  5. java8 supplier_Java8 Supplier接口和Consumer接口原理解析
  6. 油猴极速下载网盘资源
  7. 微软正版验证解决方法
  8. 高通android9 lanucher3
  9. keepass2android坚果云,Keepass+坚果云:多平台密码无缝同步(补)
  10. 【MySQL】SQL语句进阶-创建sql练习环境