蓝桥《最大和》python题解
问题描述
小蓝在玩一个寻宝游戏, 游戏在一条笔直的道路上进行, 道路被分成了 n 个方格, 依次编号 1 至 n, 每个方格上都有一个宝物, 宝物的分值是一个整数 (包括正数、负数和零), 当进入一个方格时即获得方格中宝物的分值。小蓝可 以获得的总分值是他从方格中获得的分值之和。
小蓝开始时站在方格 1 上并获得了方格 1 上宝物的分值, 他要经过若干步 到达方格 n。
当小蓝站在方格 p 上时, 他可以选择跳到 p+1到 p+D(n-p) 这些方格 中的一个, 其中 D(1)=1, D(x)(x>1)定义为 x 的最小质因数。
给定每个方格中宝物的分值, 请问小蓝能获得的最大总分值是多少。
输入格式
输入的第一行包含一个正整数 n。
第二行包含 n 个整数, 依次表示每个方格中宝物的分值。
输出格式
输出一行包含一个整数, 表示答案。
样例输入
5
1 -2 -1 3 5
样例输出
8
样例输出
最优的跳跃方案为: 1→3→4→5 。
评测用例规模与约定
对于 40 % 的评测用例,1≤n≤100 。
对于 80 % 的评测用例, 1≤n≤1000 。
对于所有评测用例, 1≤n≤10000, 每个宝物的分值为绝对值不超过 10^5 的整数。
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
分析:
前置知识:线性dp(可以看看洛谷的马前卒、蓝桥的数字金字塔,都是典型线性dp),欧拉筛
1. 一眼就能看出是线性dp,但是和一般的线性dp相比,这题的特殊点就是不知道每个点的前驱是什么了,要你计算出来。
2. 但是我们能从后面算前驱吗,实际上是做不到的。因为我们用p+D(n-p)时不知道p是什么,得通过循环来遍历,而且每次都要遍历,直接给时间复杂度乘上了一个n,极大影响体验
3. 那么我们不妨换一种方式,通过一层预处理来从前驱计算p+D(n-p)得到能到达的点,利用字典存在以后驱为键的键值对里
4. 这样就和普通的线性dp没什么区别了
n = int(input())
pri = [] # 存质数
s = [1 for _ in range(n + 1)]
d = [1]*(n+1) # 直接将d给预处理,省去查找过程
for i in range(2, n + 1): # 前面的i是数字if s[i]:pri.append(i)d[i] = i # 质数的最小质因数是它本身for j in pri: # 后面的i是倍数if i * j > n:breaks[i * j] = 0d[i*j] = j # 欧拉筛在筛选过程中就会产生最小质因数if not i % j:break
a = list(map(int, input().split()))
dp = [float('-inf')] * (n+1) # 赋值-∞保证能替掉
dp[1] = a[0]
dp[2] = a[0] + a[1]
c = dict(zip(range(2, n+1), [[] for _ in range(n-1)]))
for i in range(1, n): # 预处理前驱for j in range(1, d[n-i]+1):c[i+j].append(i)
for i in range(3, n+1): # 线性dpdp[i] = max([dp[j] for j in c[i]])+a[i-1]
print(dp[n])
提示:python怎么写都不会AC,最后一个点会TLE,但是用C++尝试是可以过的,说明时间复杂度是没有任何问题的。
蓝桥《最大和》python题解相关推荐
- 蓝桥杯-杨辉三角形-python
题目 可以结合目录来理解文章~ 原始方法 这个方法可以拿到40分.N数值比较大的时候,运行时间会超过限制. 思路 逐行生成杨辉三角,找到了需要的N以后就停止循环,并输出对应的位置. 变量解释 用于计算 ...
- python刷题 NOI题库 python题解 洛谷、牛客网、AcWing 刷题等
NOI题库 python题解-2022.01.07整理(1.1-1.3) NOI题库 python题解-2022.01.07整理(1.1-1.3)_dllglvzhenfeng的博客-CSDN博客 N ...
- 关于python的比赛_【蓝桥杯】——python集团的比赛技巧,Python,组
[蓝桥杯]-- Python组比赛技巧 蓝桥杯是大学生IT学科赛事,由工业和信息化部人才交流中心主办,所以对于大学生还说还是非常值得去参加的,2020年第十一届蓝桥杯新增了大学Python组,不分组别 ...
- 牛客题霸 [连续子数组的最大和] C++题解/答案
牛客题霸 [连续子数组的最大和] C++题解/答案 题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和 ...
- 第十二届蓝桥杯青少年python组 第1-3题 C++实现
蓝桥杯STEMA测评--Python真题讲解1 蓝桥杯STEMA测评--Python真题讲解1_哔哩哔哩_bilibili 蓝桥杯STEMA测评--Python真题讲解2 蓝桥杯STEMA测评--Py ...
- P1146 硬币翻转 python题解
一直都听石佬强推洛谷,说上面的讨论氛围很好.今天试了一下,花了一个小时左右,完成了自己的第一道题.借鉴了大佬的题解思路,理解的同时,自己用python完成了一份,下图是第一个ac,小小记录一下嘿嘿嘿. ...
- 程序员的算法趣题Q56: 鬼脚图中的横线(思路2的Python题解)
目录 1. 问题描述 2. 实现方案 3. 代码实现 4. 后记 1. 问题描述 问题描述以及此前的讨论参见: 程序员的算法趣题Q56: 鬼脚图中的横线(思路1)https://blog.csdn.n ...
- 【预览】蓝桥杯竞赛python算法笔记 代码模板|吐血总结|蓝桥杯省赛国赛
[预览]蓝桥杯竞赛python算法笔记 代码模板|吐血总结 完整版链接 文章目录 [预览]蓝桥杯竞赛python算法笔记 代码模板|吐血总结 1 二分算法求分界值 2 双指针算法 2.1 求最长的不包 ...
- CSP认证 202009-4 星际旅行 Python 题解 思路清晰
CSP认证 202009-4 星际旅行 Python 题解 思路清晰 本题找对数学关系就很容易求了,分三种情况: P1,P2的连线 与圆心的距离 >=r,即这条直线在园外,P1和P2的最短距离就 ...
- 2021 第十二届 蓝桥杯 双向排序 题解 栈+文艺平衡树
2021 第十二届蓝桥杯 双向排序 题解 栈+文艺平衡树 题目描述 思路 实现方法 代码 只用栈 只用栈的代码 题目描述 原题链接:https://www.lanqiao.cn/problems/14 ...
最新文章
- matlab regstats()
- 数字语音信号处理学习笔记——语音信号的数字模型(3)
- Windows消息机制以及相关API
- linux网卡IP同一网段,Linux下多网卡不同IP在同一网段的情况
- leetcode力扣23.括号生成
- Json转换为Model,Struct,Class对象 Swift
- 基于51单片机的医院银行排队叫号系统proteus仿真程序原理图设计
- php主页备案号底部中间,如何获取公安备案号?如何将公安备案号放到网站底部?...
- python论文降重_论文怕被查重怎么办?你的降重神器来了|简明python教程|python入门|python教程...
- css ico图标不显示,网站后台ico图标不显示的解决方法
- java答题软件_非常实用的java自动答题计时计分器
- 杂记 去中心化系统介绍
- python爬取斗鱼主播图片_F_hawk189_新浪博客
- 控制台抓包和requests.post()发送请求
- 关键词热度查询导出工具-自动每天实时关键词更新导出工具
- 有向图的邻接矩阵和邻接表画法
- 查看apk的包名和启动页activity,adb命令启动app
- win10浏览器 html乱码怎么解决,win10浏览器乱码如何解决_win10浏览器字体乱码修复方法...
- 语音识别(SR)的秘密
- C++ 写一个程序:按空格键暂停程序,再按空格键继续程序