AcWing 898. 数字三角形 (每日一题)

大家好 我是寸铁 希望这篇题解对你有用,麻烦动动手指点个赞或关注,感谢您的关注

注意

像数组下标出现i-1的,在循环的时候从i=1开始。

关于0x3f3f3f3f和Integer.MAX_VALUE

0x3f3f3f3f:1061109567
Integer.MAX_VALUE:2147483647
在选用Integer.MAX_VALUE时,很可能会出现数据溢出
所以在用Integer.MAX_VALUE需要先取MAX再加a[i][j];

边界值初始化

AcWing 898. 数字三角形 (每日一题)_第1张图片

注:做数字三角形这题时,初始化时需要注意一下边界
由于我们状态计算时,是计算左上右下的方向的最大值。
在边界时0(左上)j+1(右下)需要进行初始化
我们在初始化每一个点的状态f[i][j]时需要多初始化两个点
每一行下标分别是0一个是j+1

模板1(INF取0x3f3f3f3f)

import java.util.*;
public class Main{
    static int N=510,INF=0x3f3f3f3f;
    static int a[][]=new int[N][N];
    static int f[][]=new int[N][N];
    public static void main(String []args){
        Scanner in = new Scanner(System.in);
        int n=in.nextInt();
        for(int i=1;i<=n;i++){
            for(int j=1;j<=i;j++){
                a[i][j]=in.nextInt();
            }
        }
        for(int i=0;i<=n;i++){
            for(int j=0;j<=i+1;j++){
                f[i][j]=-INF;
            }
        }
        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-1]+a[i][j],f[i-1][j]+a[i][j]);    
            }
        }
        long res=-INF;
        for(int i=1;i<=n;i++){
            res=Math.max(res,f[n][i]);
        }
        
        System.out.println(res);
    }
}

模板2(INF取MAX_Integer)

注:

import java.util.*;
public class Main{
    static int N=510,INF=Integer.MIN_VALUE;
    static int a[][]=new int[N][N];
    static int f[][]=new int[N][N];
    public static void main(String []args){
        Scanner in = new Scanner(System.in);
        int n=in.nextInt();
        for(int i=1;i<=n;i++){
            for(int j=1;j<=i;j++){
                a[i][j]=in.nextInt();
            }
        }
        for(int i=0;i<=n;i++){
            for(int j=0;j<=i+1;j++){
                f[i][j]=-INF;
            }
        }
        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-1],f[i-1][j])+a[i][j];    
            }
        }
        long res=-INF;
        for(int i=1;i<=n;i++){
            res=Math.max(res,f[n][i]);
        }
        System.out.println(res);
    }
}

往期回顾

不清楚蓝桥杯考什么的点点下方

考点秘籍

想背纯享模版的伙伴们点点下方

蓝桥杯省一你一定不能错过的模板大全(第一期)

蓝桥杯省一你一定不能错过的模板大全(第二期)

蓝桥杯省一你一定不能错过的模板大全(第三期)

蓝桥杯省一你一定不能错过的模板大全(第四期)!!!

想背注释模版的伙伴们点点下方

蓝桥杯必背第一期

蓝桥杯必背第二期

往期精彩回顾

蓝桥杯上岸每日N题 第一期(一)!!!

蓝桥杯上岸每日N题第一期(二)!!!

蓝桥杯上岸每日N题第一期(三)!!!

蓝桥杯上岸每日N题第二期(一)!!!

蓝桥杯上岸每日N题第三期(一)!!!

蓝桥杯上岸每日N题 第四期(最少刷题数)!!!

蓝桥杯上岸每日N题 第五期(山)!!!

蓝桥杯上岸每日N题 第六期(求阶乘)!!!

蓝桥杯上岸每日N题 第七期(小猫爬山)!!!

蓝桥杯上岸每日N题 第八期 (全球变暖)!!!

蓝桥杯每日N题 (消灭老鼠)

蓝桥杯每日N题(杨辉三角形)

蓝桥杯每日N题 (砝码称重)

蓝桥杯上岸每日N题(鸡尾酒)

操作系统期末题库 第九期(完结)

LeetCode Hot100 刷题(第三期)

idea创建SpringBoot项目报错解决方案

数据库SQL语句(期末冲刺)

想看JavaB组填空题的伙伴们点点下方

填空题

竞赛干货

算法竞赛字符串常用操作大全

蓝桥杯上岸必刷!!!(模拟/枚举专题)

蓝桥杯上岸必背!!! (第三期 DP)

蓝桥杯上岸必背!!!(第四期DFS)

蓝桥杯上岸必背!!!(第五期BFS)

蓝桥杯上岸必背!!!(第六期树与图的遍历)

蓝桥杯上岸必背!!!(第七期 最短路算法)

蓝桥杯上岸必背!!!(第八期 简单数论)

蓝桥杯上岸必刷!!!(进制、数位专题)

蓝桥杯上岸考点清单 (冲刺版)!!!

蓝桥杯上岸必背模板 (纯享版)

你可能感兴趣的:(每日一题,蓝桥杯上岸,java,算法,leetcode,蓝桥杯,线性DP)