蓝桥杯 算法训练 数字三角形(最简单的DP)
传送门
题目描述
如下图示出了一个数字三角形。
请编一个程序计算从顶至底的某处的一条路径,使该路径所经过的数字的总和最大。
●每一步可沿左斜线向下或右斜线向下走;
●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)相关推荐
- 蓝桥杯——算法训练——数字三角形
蓝桥杯--算法训练--数字三角形 这道题不难,但是比较典型,可以作为动态规划(dp)的入门篇,属于线性dp(LIS,LCS和数字三角形都是此类题型). ------------------------ ...
- java 蓝桥杯算法训练 数字三角形(题解)
试题 算法训练 数字三角形 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的 ...
- Java实现 蓝桥杯 算法训练 数字三角形
算法训练 数字三角形 时间限制:1.0s 内存限制:256.0MB 问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每 ...
- 蓝桥杯算法训练 数字游戏 组合数和暴力两种解法
试题 算法训练 数字游戏 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个1-N的排列a[i],每次将相邻两个数相加,得到新序列,再对新序列重复这样的操作,显然每次得到的序列 ...
- Java实现 蓝桥杯 算法训练 数字游戏
试题 算法训练 数字游戏 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个1-N的排列a[i],每次将相邻两个数相加,得到新序列,再对新序列重复这样的操作,显然每次得到的序列 ...
- 蓝桥杯 算法训练 数字游戏
算法训练 数字游戏 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个1-N的排列a[i],每次将相邻两个数相加,得到新序列,再对新序列重复这样的操作,显然每次得到的序列都比上 ...
- 蓝桥杯算法训练-24点(Python)
问题描述 24点游戏是一个非常有意思的游戏,很流行,玩法很简单:给你4张牌,每张牌上有数字(其中A代表1,J代表11,Q代表12,K代表13),你可以利用数学中的加.减.乘.除以及括号想办法得到24, ...
- 蓝桥杯算法训练合集十三 1.P06022.P07033.逗志芃的危机4.唯一的小可爱5.JOE的矩阵
目录 1.P0602 2.P0703 3.逗志芃的危机 4.唯一的傻子 5.JOE的矩阵 1.P0602 问题描述 编写一个程序,输入一个4位的自然数,将组成该数的各位数字重新排列,形成一个最大数和一 ...
- 蓝桥杯 算法训练 逗志芃的危机
蓝桥杯 算法训练 逗志芃的危机 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和 ...
最新文章
- linux od命令详解
- Linux上日志的切割
- 人工智能(AI)在游戏中的应用(下)
- 提高代码质量 CheckStyle FindBugs PMD
- 电脑pin重置_如果忘记了如何重置Windows PIN
- 好好珍惜今生,不要期待来世……
- ubuntu设置mysql可以非本地访问_ubuntu server下设置mysql的远程访问权限
- oracle出错如何备份数据,备份oracle数据库出错
- spring boot----简单入门
- 常用的JavaScript工具类库收藏
- 实现isnum函数python_python 学习 实现isOdd函数 实现isNum()函数 实现multi() 实现isPrime() 格式化输出日期DAY16...
- button点击事件不响应的解决方法(子视图大小超过父视图)
- 磁盘驱动器号的修改恢复
- Qt QSettings读写ini时 General 读不出来值
- python的turtle库画苹果
- IntelliJ IDEA双击打不开的解决过程
- Python基础知识-字典dictionary
- 聊聊 iframe 的优缺点以及使用场景
- android有多个活动,Android活动一探究竟
- swing重写右上角叉号