数字三角形(线性dp)-java

news2025/1/31 8:03:48

线性DP是动态规划问题中的一类问题,指状态之间有线性关系的动态规划问题。

文章目录

前言

一、数字三角形问题

二、算法思路

三、使用步骤

1.代码如下(示例):

2.读入数据

3.代码运行结果

总结


前言

线性DP是动态规划问题中的一类问题,指状态之间有线性关系的动态规划问题。


提示:以下是本篇文章正文内容,下面案例可供参考

一、数字三角形问题

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

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

二、算法思路

图 1.1样例图

我们引入把数据分为5行,然后按照斜方向算一列进行存储数据。例数字6所在的位置为(5,4)。引入一个二维数组a[i][j]来存储每一个点上的数值。 

我们引入dp数组,dp[i][j]表示所有从起点走到(i,j)的路径的数字之和的最大值

我们以图中的(2,7)的数字7为例,如果要实现到数字7的路径的数字的最大值,那么就是从左上和右上的两种情况中取最大值即:

图1.2样例模拟图 

故dp[i][j]的递推公式为:

dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+a[i][j]

整个dp状态数组的数据如下:

0 0  0  0  0  0 
0 7  0  0  0  0 
0 10 15 0  0  0 
0 18 16 15 0  0 
0 20 25 20 19 0 
0 24 30 27 26 24 

三、使用步骤

1.代码如下(示例):



import java.io.*;
public class 数字三角形 {
    static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));

    public static void main(String[] args) throws Exception{
        int n = nextInt();
        int[][] a = new int[510][510];
        int[][] dp = new int[510][510];
        //录入数据
        for(int i = 1;i <= n;i++){
            for(int j = 1;j <= i;j++){
                a[i][j] = nextInt();
            }
        }
        //dp数组初始化
        for (int i = 0; i <= n;i++){
            for(int j = 0;j <= i+1;j++){
                dp[i][j] = Integer.MIN_VALUE;
            }
        }
        //构建dp数组
        dp[1][1] = a[1][1];
        for (int i = 2; i <= n;i++){
            for(int j = 1;j <= i;j++){
                dp[i][j] = a[i][j]+Math.max(dp[i-1][j-1],dp[i-1][j]);
            }
        }
        int res = Integer.MIN_VALUE;
        //dp数组的最后一行表示我们从起点走到最后一行底部的各各最大值,找出其中最大的即可
        for(int j = 1;j <= n;j++){
            res = Math.max(res,dp[n][j]);
        }
        pw.println(res);
        pw.flush();
    }
    public static int nextInt()throws Exception{
        st.nextToken();
        return (int)st.nval;
    }
}

2.读入数据

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

3.代码运行结果

30

总结

在dp数组的初始化中我们每一行的右边界值必须再往右多初始化一个值和左边界值再往左多初始化,因为左边会有一个左上的点过来,右边会有一个从右上过来的点,而且我们a数组里面的值也有可能是负数,所以初始化是采用Integer.MIN_VALUE。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1575582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工业和信息化部教育与考试中心颁发的证书有哪些?含金量如何?怎么考取?​

近期有很多网友朋友们对工业和信息化部教育与考试中心颁发的证书是否是真的证书&#xff0c;是否国家认可&#xff0c;是否全国通用&#xff0c;含金量如何&#xff1f;如何查询真假&#xff0c;以及如何报考等等相关问题有疑问&#xff0c;所以今天给大家在这里一一解答。 添加…

2.AK/SK鉴权

目录 什么是AK/SK AK/SK使用机制 时序图 什么是AK/SK 在云服务中&#xff0c;AK&#xff08;Access Key ID&#xff09;和SK&#xff08;Secret Access Key&#xff09;是访问云服务API的关键凭证对&#xff0c;主要用于身份验证和授权。AK是用户访问云服务的身份标识&…

AJ65SBTB1-32D1 三菱cc-link远程高速输入模块。

AJ65SBTB1-32D1 三菱cc-link远程高速输入模块 AJ65SBTB1-32D1用户手册, AJ65SBTB1-32D1外部连接。 AJ65SBTB1-32D1参数说明&#xff1a;DC输入32点 DC24V 5mA&#xff1b;响应时间0.2ms&#xff1b;32点1公共端&#xff1b;1线式&#xff1b;正/负公共端共用&#xff1b;端子排…

[StartingPoint][Tier1]Responder

Important 由于靶机IP是动态的,所以这里需要手动解析 # echo "<靶机IP> unika.htb">>/etc/hosts //10.10.16.59/testshare到底是什么? SMB&#xff08;Server Message Block&#xff09;是一种用于在计算机之间共享文件、打印机和其他资源的网络协议&…

1995-2021年各省分品种能源产量和消费量数据

1995-2021年各省分品种能源产量和消费量数据 1、时间&#xff1a;1995-2021年 2、来源&#xff1a;能源统计年鉴、各省年鉴 3、指标&#xff1a;能源消费总量、煤炭消费量、焦炭消费量、原油消费量、汽油消费量、煤油消费量、柴油消费量、燃料油消费量、天然气消费量、电力消…

Java入门基础知识第六课(超基础,超详细)——循环结构

前面二白讲了选择结构相关知识&#xff0c;主要是if选择结构和swich选择结构&#xff0c;这次咱们讲一下循环结构&#xff0c;主要是while、do-while、for这三种循环结构 一、while循环结构 语法&#xff1a; 初始值代码; while(循环条件){ 循环操作代码块; 迭代代码; } 执行…

产品经理考个PMP有用吗?

产品经理考PMP认证考试是否有用&#xff0c;这个问题答案是肯定的。项目管理作为一项通用管理技能&#xff0c;如果产品经理能够掌握&#xff0c;对产品设计和管理工作是十分有益的。 产品经理是企业中专门负责产品管理的职位&#xff0c;其负责明确产品需求和产品设计&#x…

关于goto的一点说明

1、goto的label是会被顺序执行的 如下例所示&#xff0c;error也会被执行。 #include <iostream>void test(bool flag) {if (flag){printf("--------------- yes.\n");}else {goto error;}error:printf("error.\n"); }int main() {std::cout <&l…

pytest教程-23-指定用例执行顺序插件-pytest-ordering

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest用例依赖插件-pytest-dependency,本小节我们讲解一下pytest指定用例执行顺序插件-pytest-ordering。 pytest在执行用例的时候&#xff0c;默认是按照文件中用例的先后顺序执行&#xff…

达梦数据库记录

1.计算日期差 SELECT DATEDIFF(day,sysdate(), 2024-06-01) 2.出现HJ_BUF_GLOBAL_SIZE设置不当造成应用报错的问题&#xff0c;详细信息如下&#xff1a; dm.jdbc.driver.DMException: 超出全局hash join空间,适当增加HJ_BUF_GLOBAL_SIZEat dm.jdbc.driver.DBError.throwExce…

opencv图像处理技术(阈值处理与图像平滑)

进行图像处理时&#xff0c;常常需要对图像进行预处理以提取所需的信息或改善图像质量。阈值处理和图像平滑是两种常见的预处理技术。 阈值处理 阈值处理是一种图像分割技术&#xff0c;其基本思想是将图像中的像素值与一个或多个预先设定的阈值进行比较&#xff0c;根据比较…

VIM支持C/C++/Verilog/SystemVerilog配置并支持Win/Linux环境的配置

作为一个芯片公司打杂人口&#xff0c;同时兼数字IC和软件&#xff0c;往往需要一个皮实耐打上天入地的编辑器… 一、先附上github路径&#xff0c;方便取走 git clone gitgithub.com:qqqw4549/vim_config_c_verilog.git 二、效果展示 支持ctrl]函数/模块跳转&#xff0c;支持…

LeetCode-46. 全排列【数组 回溯】

LeetCode-46. 全排列【数组 回溯】 题目描述&#xff1a;解题思路一&#xff1a;回溯。回溯三部曲解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案…

基于HIL+RCP的三相整流电路实验

今天给大家分享的是利用easygo netbox的模型文件&#xff0c;仿真三相整流的电路实验。 首先&#xff0c;打开Desksim软件&#xff0c;载入这个模型文件。然后切换到User Interface界面&#xff0c;自定义模型的监控界面。 我们拖入chart&#xff0c;就可以选择观测模型的三相电…

柱状图中最大的矩形-java

题目描述(力扣题库 84): 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 解题思想: 单调栈: 利用先进后出的思想, 先算出长度更高的柱子所能勾勒…

echarts可视化大屏入门

效果图&#xff1a; index.less: //css 初始化 * {margin:0;padding:0;box-sizing:border-box; } .box{width:1rem;height:1rem;background-color:pink } li{list-style:none;//消除数字前的圆点 } //声明字体 font-face{font-family:electronicFONT;src:url(../font/DS-DIGIT…

在家也能赚钱!长期副业兼职,充分利用你的零碎时间!

2024年已然匆匆走过了三分之一&#xff0c;许多人或许都感受到了这一年大环境带来的压力。然而&#xff0c;对我而言&#xff0c;每个月的副业收入尚算可观&#xff0c;稳定在3000元以上&#xff0c;这让我深感庆幸&#xff0c;因为我找到了那份适合自己的副业。 打工的日子&a…

Matlab应用层生成简述

基础软件层 目前接触到的几款控制器&#xff0c;其厂商并没有提供simulink的基础软件库一般为底层文件被封装为lib&#xff0c;留有供调用API接口虽然能根据API接口开发基础软件库&#xff0c;但耗费时间过长得不偿失 应用层 所以可以将应用层封装为一个子系统&#xff0c;其…

6轮面试辛苦拿到阿里Android开发offer,却从22k降到15k,在逗我?(2)

一般来说我会这样建议别人写简历&#xff1a; 全文杜绝任何的精通字眼&#xff0c;如果你真的精通&#xff0c;不需要投简历找工作了。 简历控制在两页左右&#xff0c;不需要找什么简历模板&#xff0c;直接 Markdown 生成 PDF 文件&#xff0c;面试官不在意你的简历有多好看…

【MacBook系统homebrew镜像记录】

安装 使用Homebrew 国内源安装脚本,贼方便&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"切换至清华大学镜像源&#xff1a; 命令合并&#xff1a; 分别切换了 brew.git、 homebrew-core.git、 homebrew-…