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     
'''


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

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

  • 36
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 36
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蓝刷题

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值