问题描述

小蓝在玩一个寻宝游戏, 游戏在一条笔直的道路上进行, 道路被分成了 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题解相关推荐

  1. 蓝桥杯-杨辉三角形-python

    题目 可以结合目录来理解文章~ 原始方法 这个方法可以拿到40分.N数值比较大的时候,运行时间会超过限制. 思路 逐行生成杨辉三角,找到了需要的N以后就停止循环,并输出对应的位置. 变量解释 用于计算 ...

  2. 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 ...

  3. 关于python的比赛_【蓝桥杯】——python集团的比赛技巧,Python,组

    [蓝桥杯]-- Python组比赛技巧 蓝桥杯是大学生IT学科赛事,由工业和信息化部人才交流中心主办,所以对于大学生还说还是非常值得去参加的,2020年第十一届蓝桥杯新增了大学Python组,不分组别 ...

  4. 牛客题霸 [连续子数组的最大和] C++题解/答案

    牛客题霸 [连续子数组的最大和] C++题解/答案 题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和 ...

  5. 第十二届蓝桥杯青少年python组 第1-3题 C++实现

    蓝桥杯STEMA测评--Python真题讲解1 蓝桥杯STEMA测评--Python真题讲解1_哔哩哔哩_bilibili 蓝桥杯STEMA测评--Python真题讲解2 蓝桥杯STEMA测评--Py ...

  6. P1146 硬币翻转 python题解

    一直都听石佬强推洛谷,说上面的讨论氛围很好.今天试了一下,花了一个小时左右,完成了自己的第一道题.借鉴了大佬的题解思路,理解的同时,自己用python完成了一份,下图是第一个ac,小小记录一下嘿嘿嘿. ...

  7. 程序员的算法趣题Q56: 鬼脚图中的横线(思路2的Python题解)

    目录 1. 问题描述 2. 实现方案 3. 代码实现 4. 后记 1. 问题描述 问题描述以及此前的讨论参见: 程序员的算法趣题Q56: 鬼脚图中的横线(思路1)https://blog.csdn.n ...

  8. 【预览】蓝桥杯竞赛python算法笔记 代码模板|吐血总结|蓝桥杯省赛国赛

    [预览]蓝桥杯竞赛python算法笔记 代码模板|吐血总结 完整版链接 文章目录 [预览]蓝桥杯竞赛python算法笔记 代码模板|吐血总结 1 二分算法求分界值 2 双指针算法 2.1 求最长的不包 ...

  9. CSP认证 202009-4 星际旅行 Python 题解 思路清晰

    CSP认证 202009-4 星际旅行 Python 题解 思路清晰 本题找对数学关系就很容易求了,分三种情况: P1,P2的连线 与圆心的距离 >=r,即这条直线在园外,P1和P2的最短距离就 ...

  10. 2021 第十二届 蓝桥杯 双向排序 题解 栈+文艺平衡树

    2021 第十二届蓝桥杯 双向排序 题解 栈+文艺平衡树 题目描述 思路 实现方法 代码 只用栈 只用栈的代码 题目描述 原题链接:https://www.lanqiao.cn/problems/14 ...

最新文章

  1. matlab regstats()
  2. 数字语音信号处理学习笔记——语音信号的数字模型(3)
  3. Windows消息机制以及相关API
  4. linux网卡IP同一网段,Linux下多网卡不同IP在同一网段的情况
  5. leetcode力扣23.括号生成
  6. Json转换为Model,Struct,Class对象 Swift
  7. 基于51单片机的医院银行排队叫号系统proteus仿真程序原理图设计
  8. php主页备案号底部中间,如何获取公安备案号?如何将公安备案号放到网站底部?...
  9. python论文降重_论文怕被查重怎么办?你的降重神器来了|简明python教程|python入门|python教程...
  10. css ico图标不显示,网站后台ico图标不显示的解决方法
  11. java答题软件_非常实用的java自动答题计时计分器
  12. 杂记 去中心化系统介绍
  13. python爬取斗鱼主播图片_F_hawk189_新浪博客
  14. 控制台抓包和requests.post()发送请求
  15. 关键词热度查询导出工具-自动每天实时关键词更新导出工具
  16. 有向图的邻接矩阵和邻接表画法
  17. 查看apk的包名和启动页activity,adb命令启动app
  18. win10浏览器 html乱码怎么解决,win10浏览器乱码如何解决_win10浏览器字体乱码修复方法...
  19. 语音识别(SR)的秘密
  20. C++ 写一个程序:按空格键暂停程序,再按空格键继续程序

热门文章

  1. java tcp dtu_【分享】使用有人DTU设备接入OneNet(基于TCP透传)
  2. 曙光g20服务器芯片组驱动,曙光i620-g20阵列卡驱动
  3. Android学习——UI高级组件三
  4. 管网gis系统 服务器,管网GIS系统可以实现什么功能
  5. 为什么我们要从MySQL迁移到TiDB?
  6. 求一款免费好用的进销存管理软件?
  7. 如何解锁物联网低代码平台操作日志功能?
  8. 大数据和云计算技术周报(第182期)
  9. 后台管理系统2——文件上传功能、富文本编辑器集成
  10. 互联网10大最有效的盈利模式