传送门

题目描述

如下图示出了一个数字三角形。
请编一个程序计算从顶至底的某处的一条路径,使该路径所经过的数字的总和最大。
  ●每一步可沿左斜线向下或右斜线向下走;
  ●1<三角形行数≤100;
  ●三角形中的数字为整数0,1,…99;

        7  3   8   8   1   0   2   7   4   4
4   5   2   6   5

输入输出格式

输入格式:

文件中首先读到的是三角形的行数。
接下来描述整个三角形

输出格式:

单独的一行, 最大总和(整数)。

输入输出样例

输入样例:

5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

输出样例:

30

分析

  • 这道题是可以说是最简单的dp入门题目了,我这里为了少开一个数组外加简化代码,做法和网上普遍的解法有点点不一样。
  • 思路:数组a[i][j]表示走到第i行第j列位置的最大值。按照行列顺序输入数据,然后求得从上面哪个位置(a[i-1][j]或a[i-1][j-1])走下来得到的该位置的值比较大,在过程中维护一个表示最大值的变量,最后输出该最大值即可。

代码如下

import java.util.*;
public class Main {static final int maxn=100+5;static int a[][]=new int [maxn][maxn];//a[i][j]表示走到第i行第j列位置的最大值static int n,t,s=0;public static void main(String[] args) {Scanner cin=new Scanner(System.in);n=cin.nextInt();for(int i=1;i<=n;i++) {for(int j=1;j<=i;j++) {t=cin.nextInt();a[i][j]=Math.max(a[i-1][j-1], a[i-1][j])+t;//状态转移方程s=Math.max(s, a[i][j]);    //维护最大值变量}}System.out.println(s);}
}

再附上常规dp加上滚动数组优化的做法:

  • 代码比上面的稍长
  • 运行效率也稍低,主要是因为进行了两次双重循环
import java.util.*;
public class Main {static final int maxn=100+5;static int a[][]=new int [maxn][maxn];static int dp[]=new int [maxn];static int n;public static void main(String[] args) {Scanner cin=new Scanner(System.in);n=cin.nextInt();for(int i=1;i<=n;i++) {for(int j=1;j<=i;j++) {a[i][j]=cin.nextInt();}}for(int i=n;i>=1;i--) {                       //注意是从n到1for(int j=1;j<=i;j++) {dp[j]=Math.max(dp[j],dp[j+1])+a[i][j];//状态转移方程}}System.out.println(dp[1]);}
}

蓝桥杯 算法训练 数字三角形(最简单的DP)相关推荐

  1. 蓝桥杯——算法训练——数字三角形

    蓝桥杯--算法训练--数字三角形 这道题不难,但是比较典型,可以作为动态规划(dp)的入门篇,属于线性dp(LIS,LCS和数字三角形都是此类题型). ------------------------ ...

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

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

  3. Java实现 蓝桥杯 算法训练 数字三角形

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

  4. 蓝桥杯算法训练 数字游戏 组合数和暴力两种解法

    试题 算法训练 数字游戏 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个1-N的排列a[i],每次将相邻两个数相加,得到新序列,再对新序列重复这样的操作,显然每次得到的序列 ...

  5. Java实现 蓝桥杯 算法训练 数字游戏

    试题 算法训练 数字游戏 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个1-N的排列a[i],每次将相邻两个数相加,得到新序列,再对新序列重复这样的操作,显然每次得到的序列 ...

  6. 蓝桥杯 算法训练 数字游戏

    算法训练 数字游戏 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个1-N的排列a[i],每次将相邻两个数相加,得到新序列,再对新序列重复这样的操作,显然每次得到的序列都比上 ...

  7. 蓝桥杯算法训练-24点(Python)

    问题描述 24点游戏是一个非常有意思的游戏,很流行,玩法很简单:给你4张牌,每张牌上有数字(其中A代表1,J代表11,Q代表12,K代表13),你可以利用数学中的加.减.乘.除以及括号想办法得到24, ...

  8. 蓝桥杯算法训练合集十三 1.P06022.P07033.逗志芃的危机4.唯一的小可爱5.JOE的矩阵

    目录 1.P0602 2.P0703 3.逗志芃的危机 4.唯一的傻子 5.JOE的矩阵 1.P0602 问题描述 编写一个程序,输入一个4位的自然数,将组成该数的各位数字重新排列,形成一个最大数和一 ...

  9. 蓝桥杯 算法训练 逗志芃的危机

    蓝桥杯 算法训练 逗志芃的危机 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和 ...

最新文章

  1. linux od命令详解
  2. Linux上日志的切割
  3. 人工智能(AI)在游戏中的应用(下)
  4. 提高代码质量 CheckStyle FindBugs PMD
  5. 电脑pin重置_如果忘记了如何重置Windows PIN
  6. 好好珍惜今生,不要期待来世……
  7. ubuntu设置mysql可以非本地访问_ubuntu server下设置mysql的远程访问权限
  8. oracle出错如何备份数据,备份oracle数据库出错
  9. spring boot----简单入门
  10. 常用的JavaScript工具类库收藏
  11. 实现isnum函数python_python 学习 实现isOdd函数 实现isNum()函数 实现multi() 实现isPrime() 格式化输出日期DAY16...
  12. button点击事件不响应的解决方法(子视图大小超过父视图)
  13. 磁盘驱动器号的修改恢复
  14. Qt QSettings读写ini时 General 读不出来值
  15. python的turtle库画苹果
  16. IntelliJ IDEA双击打不开的解决过程
  17. Python基础知识-字典dictionary
  18. 聊聊 iframe 的优缺点以及使用场景
  19. android有多个活动,Android活动一探究竟
  20. swing重写右上角叉号

热门文章

  1. Aarch64汇编语言
  2. 合并odex和少dex的apk为完整的apk文件
  3. 安卓在线按钮设计网站
  4. 【PAT乙级】1090 危险品装箱 (25 分)
  5. ActiveMQ中Queue消费者
  6. MySQL事物的概念
  7. 一款超炫酷后台权限管理系统
  8. 震惊!来看《这份程序员面试手册》!!!
  9. 2行代码实现小程序分享到朋友圈功能
  10. 遇到问题:push的时候出现fatal: Authentication failed for