11届蓝桥杯Python省赛 数字三角形

目录

题目介绍

解题思路

代码实现

题目介绍

解题思路

这是一道简单的动态规划题,我们可以先列出动态规划五部曲。

动态规划
1、dp数组及下标的含义
2、递推公式
3、dp数组如何初始化
4、遍历顺序
5、打印dp数组

 

  1. 使用dp二维数组,下表为(row,col)时,在该点最大的权值和。
  2. 递推公式根据情况有三种。其中两种是边界问题,另外一种是正常情况。
  3. 第一排仅有一个元素,只能选这一个元素,故dp[0][0] = li[0][0]
  4. 先遍历行,再遍历列
  5. 由于题目附加了特殊条件,即向左和向右次数之差不能大于1,而通过模拟发现,三角形行数为偶数时,符合条件的元素只能为dp[n-1][n//2] or dp[n-1][n//2-1],三角形行数为奇数时,符合条件的元素只能为dp[n-1][n//2]

代码实现

def ques_h():
    n = int(input())
    li = []
    for i in range(n):
        li.append(list(map(int,input().split())))
    dp = [[0 for _ in range(i+1)] for i in range(n)]
    dp[0][0] = li[0][0]
    for row in range(1,n):
        for col in range(row+1):
            if col == 0:
                dp[row][col] = dp[row-1][col] + li[row][col]
            elif row == col:
                dp[row][col] = dp[row-1][col-1] + li[row][col]
            else:
                dp[row][col] = max(dp[row-1][col]+li[row][col],dp[row-1][col-1]+li[row][col])

    if n % 2 != 0:
        return dp[n-1][n//2]
    else:
        return max(dp[n-1][n//2],dp[n-1][n//2-1])

print(ques_h())

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值