[9.28模拟] good
题意:给出一个单调递增的序列{\(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相关推荐
- c#如何实现叫号操作_C# Winfrom 实现模拟叫号(SpeechSynthesizer播放语音)
文件信息 属性 大小 日期 时间 名称 ----------- --------- ---------- ----- ---- 文件 187 ...
- 【CCCC】PAT : 团体程序设计天梯赛-练习集 L2 答案,题解,附代码
[CCCC]PAT : 团体程序设计天梯赛-练习集 L2 答案 鉴定完毕,全部水题 ヾ(•ω•`)o 知识点分类(32): 1.树锯结构(9):二叉树的存储,编号,遍历顺序转换,求深度,底层节点,从底 ...
- C#使用并行任务库(TPL)
TPL(Task Parallel Library) 任务并行库 (TPL) 是 System.Threading和 System.Threading.Tasks 命名空间中的一组公共类型和 API. ...
- 大一python基础编程试卷_Python编程基础练习题
1.#随机生成两个小于100的整数,打印其中一个数的数据类型和存储地址, 求这两个数的和.差.积.商.幂运算. 2.#求梯形的面积:输入上底和下底和高,输出面积.面积要求保留两位有效数字, 如果输入不 ...
- jQuery 中的 39 个技巧
1.当document文档就绪时执行JavaScript代码. 我们为什么使用jQuery库呢?原因之一就在于我们可以使jQuery代码在各种不同的浏览器和存在bug的浏览器上完美运行. <sc ...
- 2022东南大学916复试时间轴
2022 复 试 时 间 轴 : 2022 复试时间轴: 2022复试时间轴: 自己备考的时候时间信息掌握得不是很准确,甚至取号那一天差点睡过头.所以梳理一下我们今年比较重要的时间节点,供学弟学妹参考 ...
- Android 随笔集 By tuliyuan
目录结构 30. Android 进程保活 29.预置so到源码中遇到异常 28.模拟按键事件 27.模拟触摸事件 26.Android编译报错汇总 25. applicationContext弹出对 ...
- python办公自动化系列之金蝶K3自动登录(二)
Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...
- html5 canvas基础与动画开发详解-吴华-专题视频课程
html5 canvas基础与动画开发详解-533人已学习 课程介绍 一.本课程几乎包括所有canvas常用的api用法讲解 二.包括以下案例应用: 1.坐标系绘制 2.图片裁剪与填充 ...
最新文章
- java 金_java
- 如何正确访问 redis 中的海量数据?避免事故产生
- C++ Primer 5th笔记(chap 19 特殊工具与技术)运行时类型识別RTTI
- 【NOIP2012】旅行计划
- 初一模拟赛总结(3.30)
- concurrency_Java Concurrency Essentials教程
- csp真题202112-1 序列查询 (100分)
- [转帖]Mootools源码分析-02 -- Utils
- 如何用DAX实现查看每个月中不同类别排名前一位,以及一个简单的svg案例
- 用户使用双屏扩展桌面类软件时,所遇到的主要疑难问题汇编
- linux 用户复杂秘密,linux用户的秘密之login.defs文件详解
- 杂项工具WinHex
- Airbnb Embeding学习笔记
- PS 一键生成Android各个尺寸的图标
- 航空中的QNH QNE QFE分别都是什么
- 小程序uniapp实现左滑删除效果
- 嵌入式开发 SRAM SROM DRAM DROM DDR NAND FLASH EMMC 区别
- 阿里前端面经(笔试+3轮技术面+HR面)
- C#学习之面象对象继承练习(二)
- java正则开头结尾_以m开头以d结尾的正则表达式-正则表达式以什么开头-正则表达式不以0开头...