python输出数字三角形_Python|2020蓝桥杯之数字三角形
题目描述
上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。
对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最
大的和。
路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右
边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 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
题目分析及解题思路
这是一道标准的动态规划题目,我们首先用0补全完整的数组dp(如下所示),将数据放入数组对应的下标当中,然后,然后用dp数组去记忆从上到下路径上的值,最后再在向左下走的次数与向右下走的次数相差不能超过 1这个条件下取得的最大值,重点在于我们不能局限于这个条件,我们只需要判断我们所取值的底层的下标于顶层的下标是否相差绝对值<=1即可;
补全数组:在补全数组的过程中存在一个规律,就是第一个数据即顶部数据(该处以7为例),下标应该为N-1,故该处的下标为4;其它数据的下标于上一层的每个下标的+1 或者 -1 得到,如3和8的下标分别为7的下标+1与-1。
dp数组记忆:在用dp去记忆时,我们得注意边界问题将其分开如当j(竖)的坐标==0或者j==2*N-2都要分开处理。
得值:我们最后只需要将j的下标范围控制在[N-2,N]之间(都是闭区间)。
Python代码:
n = int(input()) # 输入的N
l = [] # 存储输入的值
for i in range(n):
l.append(list(map(int,input().split()))) # 输入数据值
dp = [[0 for _ in range(2*n-1)] for _ in range(n)] # 构建dp数组
k = n-1 # 顶部数据的下标
res = [[k]] # res用于存储各个数据的下标
for i in range(n-1):
q = [] # 用于存储当前层的下标值
for i in range(len(res[-1])):
q.append(res[-1][i]-1)
q.append(res[-1][i]+1)
# 分别-1 +1上一层的每个下标值从而得到当前下标值并保存
res.append(list(set(q))) #除去重复的下标
dp[0][k] = l[0][0] # 将顶部数据导入到相应的下标的dp数组中
for i in range(1,n): # 横向坐标
for j in range(len(l[i])):
# l为存储的输入值,res为值相对于的在dp中的下标故len(l) == len(res)
# 分边界处理res[i][j]为取出相应的下标, dp[i][res[i][j]]为当前的值
if j==0 :
dp[i][res[i][j]] = dp[i-1][res[i][j]+1]+l[i][j]
elif j>0 and j
dp[i][res[i][j]] = max(dp[i-1][res[i][j]-1], dp[i-1][res[i][j]+1])+l[i][j]
else:
dp[i][res[i][j]] = dp[i-1][res[i][j]-1]+l[i][j]
s = 0
for i in range(k-1, k+2): # 取值范围内取得最大值。输出
if s
print(s)
结语
python输出数字三角形_Python|2020蓝桥杯之数字三角形相关推荐
- 【蓝桥杯选拔赛真题25】python输出指定数据 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析
目录 python输出指定数据 一.题目要求 1.编程实现 2.输入输出 3.评分标准
- 【蓝桥杯选拔赛真题27】python输出最后字符 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析
目录 python输出最后字符 一.题目要求 1.编程实现 2.输入输出
- java蓝桥杯数字黑洞_【蓝桥杯】数字黑洞(5位黑洞数)
任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456. 求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位, ...
- 蓝桥杯 ALGO-1005 数字游戏 python
蓝桥杯 ALGO-1005 数字游戏 python 试题 算法训练 数字游戏 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个1-N的排列a[i],每次将相邻两个数相加,得到 ...
- 计蒜客 2020 蓝桥杯大学 B 组省赛模拟赛 (一)题目及解析
新手,欢迎交流,更新完毕. 计蒜客 2020 蓝桥杯大学 A 组省赛模拟赛 (一)题目及解析 文章目录 A. 结果填空:有趣的数字 B. 结果填空:爬楼梯 C. 结果填空:七巧板 D. 结果填空:苹果 ...
- 2020蓝桥杯B 组省赛计蒜客模拟赛(一)题解
2020蓝桥杯省赛 B 组计蒜客模拟赛(一)目录 试题 A:有趣的数字(结果填空) 试题 B:爬楼梯(结果填空) 试题 C:七巧板(结果填空) 试题 D:苹果(结果填空) 试题 E:方阵(结果填空) ...
- 计蒜客2020蓝桥杯大学A组模拟赛题解
计蒜客2020蓝桥杯大学A组模拟赛题解 蓝桥杯的话,去年拿了C++组的国二.今年报名了新成立的Python组,不知道能不能摸到国一的鱼 模拟赛链接如下: https://www.jisuanke.co ...
- 计蒜客 2020 蓝桥杯大学 A 组省赛模拟赛 (一)题目及解析
新手,欢迎交流,剩下D题不知如何下手,望大佬指教. 计蒜客 2020 蓝桥杯大学 B 组省赛模拟赛 (一)题目及解析 文章目录 A. 结果填空:计算周长 B. 结果填空:七巧板 C. 结果填空:苹果 ...
- 7.python解答2018年第九届蓝桥杯省赛C++A组 分数
7.python解答2018年第九届蓝桥杯省赛C++A组 分数 标题:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + - 每项是前一项的一半,如果一共有20项,求这个和是多少,结果 ...
- 【蓝桥杯选拔赛真题41】python输出数字组合 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析
目录 python输出数字组合 一.题目要求 1.编程实现 2.输入输出
最新文章
- ACM HDU 1249
- doctype的种类
- 布局练习——选择水果
- wxWidgets的简介
- 数据库唯一主键如何实现幂等性?
- Codeforces Round #623 (Div. 2, based on VK Cup 2019-2020 - Elimination Round, Engine) C. Restoring
- 前端学习(2872):Vue路由权限『前后端全解析』3
- 大数据之_数据采集Flume_Flume了解_学习内容介绍---Flume工作笔记002
- git checkout切换到指定commit
- c# 多线程界面卡顿_C#多线程解决界面卡死问题的完美解决方案
- 一次CDN源站负载高的问题排查及解决
- tableau 日周月筛选器_Tableau技巧——快速计算同比和环比(及其衍生)
- matlab推导高斯两点求积公式,谁有复何求积公式和高斯求积公式在matlab中实现的... 确定求积公式(如下图)中的待定系数,并指出所构造的......
- IntelliJ IDEA 2017 汉化包及安装
- CFT每日一题之 天下武功,唯快不破
- android+google+play,打开链接的google play商店在手机版android
- 数据结构学习(考研408)
- 【ESP32 开发】ArduinoJson联合PSRAM解决 ESP32内存过小 无限重启的问题
- java注解 pdf_使用 iText 复制带注释的 PDF
- canvas实现一个线性图