博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #162 (Div. 1) B. Good Sequences (dp+分解素数)
阅读量:4354 次
发布时间:2019-06-07

本文共 943 字,大约阅读时间需要 3 分钟。

题目:

题意:给你一个递增序列,然后找出满足两点要求的最长子序列

第一点是a[i]>a[i-1]   

第二点 gcd(a[i],a[i-1])>1 也就是说两个数不能互质

找出最长的子序列长度

 

思路:首先想互质问题,如果两个数互质说明两个数之间没有素因子相同,我们想以每个素因子结尾的最大长度是多少

然后比如样例 2 3 4 6 9

第一个数 2      2结尾 1

第二个数 3      3结尾 1

第三个数 4       2结尾 2

第四个数6        拆分因子有   2,3      2结尾 3, 3结尾2        ,但是这个时候我以6结尾,那么其实3这个位置长度也是3了,

(所以,我们要找出最大的那个长度,再重新赋值到这个数的每个素因子上) 这个时候就能解出来了

#include
#include
#include
#include
#include
#include
#include
#define mod 1000007#define maxn 200001using namespace std;typedef long long ll;ll a[maxn];ll dp[maxn];ll n;int main(){ cin>>n; for(int i=0;i
>a[i]; } for(int i=0;i
mp; vector
q; while(z!=1){ ll t=(ll)sqrt((double)z);//必须要加,不然会超时 ll j=2; for(;j<=t;j++){ if(z%j==0){ if(mp[j]==0) q.push_back(j); mp[j]++; z/=j; break; } } if(j==t+1){ if(mp[z]==0) q.push_back(z);//判断素数情况 break; } } ll mx=-1; for(int j=0;j

 

转载于:https://www.cnblogs.com/Lis-/p/10727115.html

你可能感兴趣的文章
AngularJS中使用$resource
查看>>
[poj3261]Milk Patterns(后缀数组)
查看>>
[luogu3369]普通平衡树(fhq-treap模板)
查看>>
题解 P2799 【国王的魔镜】
查看>>
写写代码,注意注意细节
查看>>
css Backgroud-clip (文字颜色渐变)
查看>>
安装 OpenSSL 工具
查看>>
用长微博工具发布长微博
查看>>
大庆金桥帆软报表案例
查看>>
方维分享系统,个人中心杂志社显示我的、关注的、推荐的数量
查看>>
JavaScript BOM加载事件
查看>>
Java复习总结——详细理解Java反射机制
查看>>
Navicat for MySQL10.1.7注册码
查看>>
Proxy模式
查看>>
读书多些会怎样
查看>>
浏览器好用的技术
查看>>
HDU 2188------巴什博弈
查看>>
tp5任务队列使用supervisor常驻进程
查看>>
Xmind?
查看>>
spring+quartz 实现定时任务三
查看>>