Acwing.898 数字三角形(动态规划)

题目

给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出─条路径,使路径上的数字的和最大。

输入格式

第一行包含整数n,表示数字三角形的层数。

接下来n行,每行包含若干整数,其中第i行表示数字三角形第i层包含的整数。

输出格式

输出一个整数,表示最大的路径数字和。

数据范围

1 ≤n ≤500,

---10000<三角形中的整数≤10000

  • 输入样例:
java 复制代码
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
  • 输出样例:
java 复制代码
30

题解

java 复制代码
import java.util.Scanner;

/**
 * @author akuya
 * @create 2023-07-24-19:48
 */
public class DigitalTriangle {
    static int N=510;
    static int n;
    static int f[][]=new int[N][N];
    static int a[][]=new int[N][N];
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        n=scanner.nextInt();
        for(int i=1;i<=n;i++){
            for(int j=1;j<=i;j++){
                a[i][j]=scanner.nextInt();
            }
        }


        for(int i=0;i<n+1;i++){
            for(int j=0;j<n+1;j++){
                f[i][j]=-1;
            }
        }

        f[1][1]=a[1][1];

        for(int i=2;i<=n;i++){
            for(int j=1;j<=i;j++){
                f[i][j]=Math.max(f[i-1][j]+a[i][j],f[i-1][j-1]+a[i][j]);
            }
        }

        int res=-99;
        for(int i=1;i<=n;i++)res=Math.max(res,f[n][i]);


        System.out.println(res);
    }
}

思路

与背包问题一样,属于动态规划的最基本题型,每个点只需要确定左上与右上最大值即可。如图

相关推荐
一个专注写代码的程序媛3 分钟前
流式读取数据
java·数据结构·算法
Halo_tjn5 分钟前
Java Set集合知识点
java·开发语言·数据结构·windows·算法
小园子的小菜12 分钟前
深入理解Trie树:敏感词过滤的核心原理与实现思路
算法
Tisfy13 分钟前
LeetCode 2402.会议室 III:优先队列大模拟
算法·leetcode·题解·优先队列·排序·大模拟
byzh_rc16 分钟前
[算法设计与分析-从入门到入土] 基础算法
数据结构·算法·排序算法
2022.11.7始学前端18 分钟前
Dify第二节:AI 出题助手并写入飞书云文档
算法·工作流·dify
wuhen_n20 分钟前
LeetCode -- 349. 两个数组的交集(简单)
前端·javascript·算法·leetcode
Pyeako21 分钟前
机器学习--集成学习之随机森林&贝叶斯算法
python·算法·随机森林·机器学习·集成学习·贝叶斯算法
大头流矢23 分钟前
《数据结构·排序·进阶:希尔、堆、快排核心解析》——为何希尔是插入进阶?堆排序时间复杂度的关键?
c语言·数据结构·算法
睡醒了叭31 分钟前
图像分割-传统算法-聚类算法
opencv·算法·计算机视觉·聚类