【数字三角形】

题目描述

上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。

路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。

输入描述

输入的第一行包含一个整数 N (1 ≤ N ≤ 100),表示三角形的行数。

下面的 N 行给出数字三角形。数字三角形上的数都是 0 至 100 之间的整数。

输出描述

输出一个整数,表示答案。

输入输出样例

示例

输入:

5

7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

输出:

27

运行限制

最大运行时间:1s

最大运行内存: 256M

python 复制代码
num=int(input())
mapp=[]
for item in range(num):
    data=list(map(int,input().split()))
    mapp.append(data)
    pass
dp=[[0 for i in range(0,j+1)]for j in range(num)]
for item in range(num):
    for jtem in range(item+1):
        if item==jtem==0:
            dp[item][jtem]=mapp[0][0]
            pass
        if jtem==0:
            dp[item][jtem]=mapp[item][jtem]+dp[item-1][jtem]
            pass
        elif jtem==item:
            dp[item][jtem]=mapp[item][jtem]+dp[item-1][jtem-1]
            pass
        else:
            dp[item][jtem]=max(mapp[item][jtem]+dp[item-1][jtem-1],mapp[item][jtem]+dp[item-1][jtem])
            pass
        pass
    pass
if num%2==0:
    anss=max(dp[num-1][(num)//2],dp[num-1][(num)//2-1])
    pass
else:
    anss=dp[num-1][(num)//2]
    pass
print(anss)

题目中左右步数相差不超过一,则说明了最后的答案一定是处于中间的,//表示做除法后向下取整

相关推荐
Sylvia-girl25 分钟前
数据结构之复杂度
数据结构·算法
CQ_YM39 分钟前
数据结构之队列
c语言·数据结构·算法·
VekiSon1 小时前
数据结构与算法——树和哈希表
数据结构·算法
大江东去浪淘尽千古风流人物2 小时前
【DSP】向量化操作的误差来源分析及其经典解决方案
linux·运维·人工智能·算法·vr·dsp开发·mr
Unstoppable222 小时前
代码随想录算法训练营第 56 天 | 拓扑排序精讲、Dijkstra(朴素版)精讲
java·数据结构·算法·
饕餮怪程序猿3 小时前
A*算法(C++实现)
开发语言·c++·算法
电饭叔3 小时前
不含Luhn算法《python语言程序设计》2018版--第8章14题利用字符串输入作为一个信用卡号之二(识别卡号有效)
java·python·算法
2301_800256113 小时前
8.2 空间查询基本组件 核心知识点总结
数据库·人工智能·算法
不穿格子的程序员3 小时前
从零开始写算法——矩阵类题:矩阵置零 + 螺旋矩阵
线性代数·算法·矩阵
资深web全栈开发4 小时前
LeetCode 3432. 统计元素和差值为偶数的分区方案数
算法·leetcode