数字三角形-蓝桥杯真题动态规划PYTHON解法

这篇具有很好参考价值的文章主要介绍了数字三角形-蓝桥杯真题动态规划PYTHON解法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

题目描述

 解题思路

DP初始化

DP最终条件

DP初始条件

题目限制条件

总代码


题目描述

数字三角形-蓝桥杯真题动态规划PYTHON解法

 解题思路

首先映入我们眼帘的就是一个三角形,加求路径和最大,类似于找最短路径的题,很明显是一个二维数组的动态规划问题,对于动态规划问题我们只需要找好最终条件,初始条件(也就是特殊条件),当然还要题目限制的条件既可求解。

DP初始化

我们需要两个二维数组,一个是array数组存放的是题目输入进来的三角形数据,第二个数组是dp数组存放的是到每一步的最大路径和。

    n=int(input())
    array=[list(map(int,input().strip().split())) for j in range(n)]
    dp=[[0 for i in range(n)]for j in range(n)]

DP最终条件

排开特殊的状态也就是初始状态,一个数无非从左上来或者从右上来,取其中两个最大的和该点相加这就是最终条件

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

DP初始条件

我们观察此题一共有三个初始状态需要我们初始化:

1.当这个数是第一个数时,我们就直接把值赋值给它

if i==j==0:
    dp[i][j]=array[0][0]

2.当这个数在第一列时,那么他的值只可能从右上来,我们需要把上一排右上的值赋值给他

elif j==0:
    dp[i][j]=dp[i-1][j]+array[i][j]

3.当这个数是这一排最后一个数时,由题目可知也就是i=j时,这个数的值只可能从左上来,我们需要把上一排左上的值赋值给他

 elif i==j:
    dp[i][j]=dp[i-1][j-1]+array[i][j]

题目限制条件

通过以上的DP我们算出了每个点的最大路径值,那么题目要求我们向左和向右的差值不能超过1。我们通过观察可以发现:

1.当到奇数行时要满足向左向右差值不能是1,这个值必然是最中间的值

    if n&1:
        print(dp[n-1][n//2])

2.当到偶数行时要满足向左向右差值不能是1,这个值必然是最中间两个值的一个

    else:
        print(max(dp[n-1][n//2-1],dp[n-1][n//2]))

其实就是从奇数行(第一行)的最中间出发,然后出发到第二行,到第三行奇数行的时候为了平衡不管第二行是什么结果都会跑到第三行正中间,平衡后 就又可以左右都走,跑到了偶数行的中间两个。文章来源地址https://www.toymoban.com/news/detail-487063.html

总代码

    n=int(input())
    array=[list(map(int,input().strip().split())) for j in range(n)]
    dp=[[0 for i in range(n)]for j in range(n)]
    for i in range(n):
        for j in range(i+1):
            if i==j==0:
                dp[i][j]=array[0][0]
            elif j==0:
                dp[i][j]=dp[i-1][j]+array[i][j]
            elif i==j:
                dp[i][j]=dp[i-1][j-1]+array[i][j]
            else:
                dp[i][j]=max(dp[i-1][j-1]+array[i][j],dp[i-1][j]+array[i][j])
    if n&1:
        print(dp[n-1][n//2])
    else:
        print(max(dp[n-1][n//2-1],dp[n-1][n//2]))

到了这里,关于数字三角形-蓝桥杯真题动态规划PYTHON解法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 蓝桥杯第十一届省赛——数字三角形(python组)

    题目:数字三角形 【问题描述】: 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最 大的和。 路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边

    2023年04月10日
    浏览(35)
  • 蓝桥杯真题——三角形的面积

    题目描述 平面直角坐标系中有一个三角形, 请你求出它的面积。 输入描述 第一行输入一个 T ,代表测试数据量. 每组测试数据输入有三行,每行一个实数坐标 (x,y) 代表三角形三个顶点。 1≤T≤10^3,   −10^5≤x,y≤10^5 输出描述 输出一个实数表示三角形面积。结果保留2位小

    2023年04月11日
    浏览(28)
  • 算法分析与设计-数字三角形问题(动态规划)(通俗易懂,附源码和图解,含时间复杂度分析)(c++)

    (一)题目 问题描述 给定一个由 n n n 行数字组成的数字三角形,如图所示。 试设计一个算法,计算从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 算法设计 对于给定的由 n n n 行数字组成的数字三角形,计算从该三角形的顶至底的路径经过的数字和的最大值

    2023年04月10日
    浏览(30)
  • 数字三角形+包子凑数(蓝桥杯JAVA解法)

    题目描述 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和(路径上的每一步只可沿左斜线向下或右斜线向下走)。 输入描述 输入的第一行包含一个整数 N (1≤N≤

    2024年02月01日
    浏览(28)
  • 力扣120. 三角形最小路径和(Java 动态规划)

    Problem: 120. 三角形最小路径和 Problem:64. 最小路径和 本题目可以看作是在上述题目的基础上改编而来,具体的思路: 1.记录一个int类型的大小的 n 乘 n n乘n n 乘 n 的数组(其中 n n n 为数组triangle的行数)用于记录 每一个当前阶段的最小路径和 2.大体上可以依据题意得出动态转移

    2024年01月22日
    浏览(29)
  • 蓝桥杯官网填空题(三角形的面积)

    题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 已知三角形三个顶点在直角坐标系下的坐标分别为: ```txt (2.3, 2.5) (6.4, 3.1) (5.1, 7.2) ```txt 求该三角形的面积。 注意,要提交的是一个小数形式表示的浮点数。 要求精确到小数后 3 位

    2024年02月09日
    浏览(38)
  • 【数字三角形】

    题目描述 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走

    2024年02月05日
    浏览(41)
  • 【数字三角形】(C++版)

    题目描述 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走

    2024年02月16日
    浏览(26)
  • 蓝桥 卷“兔”来袭编程竞赛专场-03破解三角形密码 题解

    挑战介绍 三角形密码指的是将一串字符串按照正直角三角形的形状排列,传递的信息隐藏在每一行的最后一个字符,然后将所有的行的最后一个字符依次连接,就是需要传递的信息。 例如加密后的字符串是:我们爱的是蓝色的心桥 将加密字符串按照正直角三角形填充后如下

    2023年04月16日
    浏览(28)
  • AcWing 898. 数字三角形 (每日一题)

    像数组下标 出现 i-1 的,在循环的时候从 i=1 开始。 0x3f3f3f3f : 1061109567 Integer.MAX_VALUE : 2147483647 在选用 Integer.MAX_VALUE 时,很可能会出现 数据溢出 。 所以在用 Integer.MAX_VALUE 时 需要先取 MAX 再加 a[i][j]; 注:做 数字三角形 这题时, 初始化时需要注意一下边界 。 由于我们 状态计

    2024年02月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包