2020年第11届蓝桥杯省赛Python组(真题+解析+代码):数字三角形

  大家好,我是爱分享的小蓝,欢迎交流指正~ 


1 真题

输入

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

输出

27

2 解析

难度系数:⭐⭐

考察题型:动态规划

涉及知识点:模块

思路分析:

1.循环遍历

遇到金字塔形状数据,先构建二重for循环,遍历每个数,进行求和计算O(∩_∩)O

2.递推公式

求和一共三种情况:元素在 最左边 or 中间 or 最右边

3.打印答案

最后打印需要分类讨论,奇数和偶数。

因为题目中要求:”向左下走的次数与向右下走的次数相差不能超过1“

按这个规则自己走一下,会发现答案必然落在中间。

如果n为奇数时,最后必然走到倒数第一行中间的数 a[-1][n//2]
而如果n为偶数时,则取中间两个数的最大值 max(a[-1][n//2-1],a[-1][n//2])


3 代码

#DP-数字三角形
n=int(input())#5
dp=[list(map(int,input().split())) for i in range(n)]
for i in range(1,n):                      #1~n-1
    for j in range(i+1):                  #0~i 
        if j==0:                          #最左边元素只能由右上方得到
            dp[i][j]+=dp[i-1][j]
        elif j==i:                        #最右边元素只能由左上方得到
            dp[i][j]+=dp[i-1][j-1]
        else:                             #中间元素取上方相邻两个最大值
            dp[i][j]+=max(dp[i-1][j-1],dp[i-1][j])
if n%2==1:                                #奇数行,返回中间值
    print(dp[-1][n//2])
else:                                     #偶数行,返回中间两个的最大值
    print(max(dp[-1][n//2-1],dp[-1][n//2])) #27
'''样例输入      样例输出           样例输入     样例输出  
i\j 0 1 2 3 4   0  1  2  3  4     0 1 2 3    0  1  2  3 
0   7           7                 7          7
1   3 8         10 15             3 8        10 15 
2   8 1 0       18 16 15          8 1 0      18 16 15
3   2 7 4 4     20 25 20 19       2 7 4 4    20 25 20 19
4   4 5 2 6 5   24 30 27 26 24     
'''

2020年第11届蓝桥杯省赛Python组(真题+解析+代码):数字三角形_第1张图片


   读码上万行,下键如有神,撸起袖子加油干!

蓝桥杯python组十一届省赛真题+解析+代码(通俗易懂版)_「小蓝の蓝桥城」-CSDN博客_蓝桥杯python省赛历年真题小蓝要为一条街的住户制作门牌号。这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。小蓝有一个数字矩阵,里面只包含数字 0 和 2。小蓝每天都锻炼身体。正常情况下,小蓝每天跑 1 千米。如下图所示,小明用从1开始的正整数“蛇形”填充无限大的矩阵。https://blog.csdn.net/m0_55148406/article/details/122863264?spm=1001.2014.3001.5502

你可能感兴趣的:(备战蓝桥杯,动态规划,蓝桥杯,python,职场和发展,算法)