题意:给出一个单调递增的序列{\(a_i\)},要你构造一个序列{\(x_i\)},使得:
1、\(x_i\in{\{a_i}\}\)
2、\(\{x_i\}\)单调递增
3、\(gcd(x_i,x_i+1)>1\)
求出最长的\(\{x_i\}\)序列

题解:

dp

dp[i]表示选第i个数的最大长度

显然可以\(n^2\)的实现

考虑如何优化

利用gcd的性质,一个数只会被与它有公共质因子的数转移到,所以当一个数要被与它某一个质因子相同的数转移时,我们只需要考虑已知贡献最大的那个数即可

所以分解出每个数的质因子,利用每一个质因子作为代表进行转移即可

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#define ll long long
#define N 100010
using namespace std;int n,cnt,ans,dp[N],pri[N],a[N],c[N];
bool mark[N];vector<int> ve[N];int gi() {int x=0,o=1; char ch=getchar();while(ch!='-' && (ch<'0' || ch>'9')) ch=getchar();if(ch=='-') o=-1,ch=getchar();while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();return o*x;
}void pre() {for(int i=2; i<=100000; i++) {if(!mark[i]) pri[++cnt]=i;for(int j=1; j<=cnt && i*pri[j]<=100000; j++) {mark[i*pri[j]]=1;if(i%pri[j]==0) break;}}for(int j=1; j<=cnt; j++) for(int i=pri[j]; i<=100000; i+=pri[j])ve[i].push_back(pri[j]);
}int main() {n=gi();pre();for(int i=1; i<=n; i++) a[i]=gi();for(int i=1; i<=n; i++) {int siz=ve[a[i]].size();for(int j=0; j<siz; j++) dp[i]=max(dp[i],c[ve[a[i]][j]]+1);for(int j=0; j<siz; j++) c[ve[a[i]][j]]=max(c[ve[a[i]][j]],dp[i]);}for(int i=1; i<=n; i++) ans=max(ans,dp[i]);printf("%d", ans);return 0;
}

转载于:https://www.cnblogs.com/HLXZZ/p/7617486.html

[9.28模拟] good相关推荐

  1. c#如何实现叫号操作_C# Winfrom 实现模拟叫号(SpeechSynthesizer播放语音)

    文件信息 属性            大小     日期    时间   名称 ----------- ---------  ---------- -----  ---- 文件         187 ...

  2. 【CCCC】PAT : 团体程序设计天梯赛-练习集 L2 答案,题解,附代码

    [CCCC]PAT : 团体程序设计天梯赛-练习集 L2 答案 鉴定完毕,全部水题 ヾ(•ω•`)o 知识点分类(32): 1.树锯结构(9):二叉树的存储,编号,遍历顺序转换,求深度,底层节点,从底 ...

  3. C#使用并行任务库(TPL)

    TPL(Task Parallel Library) 任务并行库 (TPL) 是 System.Threading和 System.Threading.Tasks 命名空间中的一组公共类型和 API. ...

  4. 大一python基础编程试卷_Python编程基础练习题

    1.#随机生成两个小于100的整数,打印其中一个数的数据类型和存储地址, 求这两个数的和.差.积.商.幂运算. 2.#求梯形的面积:输入上底和下底和高,输出面积.面积要求保留两位有效数字, 如果输入不 ...

  5. jQuery 中的 39 个技巧

    1.当document文档就绪时执行JavaScript代码. 我们为什么使用jQuery库呢?原因之一就在于我们可以使jQuery代码在各种不同的浏览器和存在bug的浏览器上完美运行. <sc ...

  6. 2022东南大学916复试时间轴

    2022 复 试 时 间 轴 : 2022 复试时间轴: 2022复试时间轴: 自己备考的时候时间信息掌握得不是很准确,甚至取号那一天差点睡过头.所以梳理一下我们今年比较重要的时间节点,供学弟学妹参考 ...

  7. Android 随笔集 By tuliyuan

    目录结构 30. Android 进程保活 29.预置so到源码中遇到异常 28.模拟按键事件 27.模拟触摸事件 26.Android编译报错汇总 25. applicationContext弹出对 ...

  8. python办公自动化系列之金蝶K3自动登录(二)

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  9. html5 canvas基础与动画开发详解-吴华-专题视频课程

    html5 canvas基础与动画开发详解-533人已学习 课程介绍         一.本课程几乎包括所有canvas常用的api用法讲解 二.包括以下案例应用: 1.坐标系绘制 2.图片裁剪与填充 ...

最新文章

  1. java 金_java
  2. 如何正确访问 redis 中的海量数据?避免事故产生
  3. C++ Primer 5th笔记(chap 19 特殊工具与技术)运行时类型识別RTTI
  4. 【NOIP2012】旅行计划
  5. 初一模拟赛总结(3.30)
  6. concurrency_Java Concurrency Essentials教程
  7. csp真题202112-1 序列查询 (100分)
  8. [转帖]Mootools源码分析-02 -- Utils
  9. 如何用DAX实现查看每个月中不同类别排名前一位,以及一个简单的svg案例
  10. 用户使用双屏扩展桌面类软件时,所遇到的主要疑难问题汇编
  11. linux 用户复杂秘密,linux用户的秘密之login.defs文件详解
  12. 杂项工具WinHex
  13. Airbnb Embeding学习笔记
  14. PS 一键生成Android各个尺寸的图标
  15. 航空中的QNH QNE QFE分别都是什么
  16. 小程序uniapp实现左滑删除效果
  17. 嵌入式开发 SRAM SROM DRAM DROM DDR NAND FLASH EMMC 区别
  18. 阿里前端面经(笔试+3轮技术面+HR面)
  19. C#学习之面象对象继承练习(二)
  20. java正则开头结尾_以m开头以d结尾的正则表达式-正则表达式以什么开头-正则表达式不以0开头...

热门文章

  1. JavaScript面向对象与传统面向对象的一点区别
  2. 中文金额大写转换处理
  3. Linux命令之uname
  4. oracle 管道化表函数(Pipelined Table) [转]
  5. 使用ycsb对mongodb做性能测试
  6. Python: translate()审查清理文本字符串
  7. Oracle用户被锁定解决方法
  8. ###修改图片为圆形
  9. flume bucketpath的bug一例
  10. Windows注册文件类型信息的学习心得