博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
16-算法训练 数字三角形
阅读量:5301 次
发布时间:2019-06-14

本文共 1066 字,大约阅读时间需要 3 分钟。

        算法训练 数字三角形  
时间限制:1.0s   内存限制:256.0MB
    
问题描述
  (图3.1-1)示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路
  径,使该路径所经过的数字的总和最大。
  ●每一步可沿左斜线向下或右斜线向下走;
  ●1<三角形行数≤100;
  ●三角形中的数字为整数0,1,…99;
  
.
  (图3.1-1)
输入格式
  文件中首先读到的是三角形的行数。
  接下来描述整个三角形
输出格式
  最大总和(整数)
样例输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
样例输出
30
 
思路:dp, 注意用记忆数组,否则超时!!!
import java.util.Scanner;public class Main {	public static int n;	public static int[][] map = new int[110][120];	public static int[][] sum = new int[110][120];	public static void main(String[] args) {		// TODO Auto-generated method stub		Scanner cin = new Scanner(System.in);		n = cin.nextInt();		for(int i = 0; i < n; i++) {			for(int j = 0; j <= i; j++) {				map[i][j] = cin.nextInt();//				System.out.println(sum[i][j]);			}		}		System.out.println(get(0,0));	}	public static int get(int i, int j) {		if(sum[i][j] != 0) {   //判断之前是否访问过,避免重复搜索而超时			return sum[i][j];		}		if(i == n - 1) {			return sum[i][j] = map[i][j];		}		return sum[i][j] = Math.max( get(i+1,j), get(i+1,j+1)) + map[i][j];	}}

  

转载于:https://www.cnblogs.com/zhumengdexiaobai/p/10367523.html

你可能感兴趣的文章
九度oj 题目1499:项目安排
查看>>
内置函数
查看>>
深度剖析collections模块
查看>>
BZOJ_1018_[SHOI2008]_交通堵塞traffic_(线段树)
查看>>
PyCharm Change Font Size
查看>>
理解Python中的__init__和__new__
查看>>
None.js 第六步 Stream(流)
查看>>
ajax:error:function (XMLHttpRequest, textStatus, errorThrown) 中status、readyState和textStatus状态意义...
查看>>
Day4 数据类型
查看>>
【转】Nicescroll滚动条插件的用法
查看>>
Redis复制与可扩展集群搭建(转)
查看>>
软件工程概论第六章--面向对象基础
查看>>
网络传输方式的分类
查看>>
思1-基本三观
查看>>
angularJS--apply() 和digest()方法
查看>>
Alpha 冲刺 (5/10)
查看>>
PHP函数之$_SERVER
查看>>
利用安装光盘创建本地yum源补装 RPM 软件包-通过命令行模式
查看>>
XML通過XSD產生CLASS
查看>>
跨线程调用窗体控件
查看>>