数字三角形(java)
问题描述:
在数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。
路径上的每一步都只能往左下或 右下走。只需要求出这个最大和即可,不必给出具体路径。
三角形的行数大于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)相关推荐
- 蓝桥杯数字三角形java,蓝桥杯数字三角形(java)
题目要求: 问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●1<三角形行 ...
- 蓝桥杯 2020省赛 数字三角形 java
分析 此题和https://blog.csdn.net/weixin_51995229/article/details/123165388这个题很相似,可以参考后看下面的 只不过比上个题多加了个条件: ...
- 蓝桥杯-数字三角形 (java)
算法训练 数字三角形 时间限制:1.0s 内存限制:256.0MB问题描述(图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路径,使该路径所经过的数字的总和最大.●每一步可沿 ...
- 数字三角形的显示 java
数字三角形的显示 java 实现一行符号的输出 public class line {public static void main(String[] args) {// 实现输出一行符号的功能int ...
- java 蓝桥杯算法训练 数字三角形(题解)
试题 算法训练 数字三角形 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的 ...
- java 数字三角形
1. 实践题目 7-1 数字三角形 2. 问题描述 给定一个由 n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过 ...
- 用java解决数字三角形问题(动态规划)
问题描述:试设计一个算法,计算出从三角形的顶到底的一条路径,使该路径经过的数字总和最大,输出最大值和具体路径. 算法构思:采用动态规划的方法自底向上求解较大值,并将每次求的的值保存到一个二维数组中,该 ...
- 蓝桥杯 Java试题 H: 数字三角形
大家关注微信公众号 罡罡同学 回复蓝桥杯 可免费获得历年真题和C语言版的真题源代码 Java试题 H: 数字三角形 4 5 2 6 5 [样例输出] 27 import java.util.Scann ...
- 蓝桥杯———数字三角形(JAVA)
题目: 上图给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径.对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和. 路径上的每一步只能从一个数走到下一层和它最近的左 ...
最新文章
- php dedecms 记录访问者ip,dedecms实现显示访问者ip地址的方法
- 23万小鹏P7,到底够不够格PK国产特斯拉
- lightgbm中的feval参数使用明细
- ubuntu 14.04 编译android4.0 出现gcc-version.sh: line 11: cc: command not found错误解决方法
- wampserver无法打开http://127.0.0.1/
- netbeans6.8_NetBeans IDE 8.0和Java 8的新功能
- 局域网ARP病毒的清理
- 太大如何翻页固定表头_外行学 Python 爬虫 第六篇 动态翻页
- 写于公元2006年2月14日
- qemu前后端features协商过程分析(vhost_user后端)
- 斯特灵公式求阶乘c语言,斯特林公式求阶乘
- vs 编译nmake工程
- FPGA音频录音,WM8731音频采集存储DDR3,基于米联客FDMA实现
- 腾讯web引用skey g_tk bkn和日期显示分析
- 《东周列国志》第七十三回 伍员吹箫乞吴市 专诸进炙刺王僚
- 华为HCNA路由与交换eNSP实战(2)负载分担和路由备份
- android 图片手动放大,Android图片的手动放大缩小
- Java并发编程系列18:多线程之生产者和消费者模式_信号灯法(wait/notify通知机制)
- 两种方法编写圆的周长和面积
- dockers安装redis