题目链接:http://codeforces.com/problemset/problem/264/B

题意:给出一个严格递增的一串数字,求最长的相邻两个数的gcd不为1的序列长度

其实这题可以考虑一下素因数,将每一个数都已是分解为几个不重复的素数,设dp[i]为含有因数i的最长序列有多长

然后遍历一下这串数字,每次更新dp[a[i]]=max(dp[j]+1,dp[a[i]]),j表示a[i]的素因数,再将每个素因数更新为

最大值。

for(int i = 1 ; i <= n ; i++) {

int gg = a[i] , flag = 0 , sum = 0;

MAX = 0;

for(int j = 0 ; j < cnt ; j++) {

flag = 0;

while(gg % num[j] == 0) {

flag = 1;

gg /= num[j];

}

if(flag == 1) {

b[sum++] = num[j];

}

if(gg == 1)//不加这句会超时,因为最后当gg为1的时候就没有1以外的因数了再找下去就是浪费时间

break;

}

for(int j = 0 ; j < sum ; j++) {

MAX = max(dp[b[j]] + 1 , MAX);

}

for(int j = 0 ; j < sum ; j++) {

dp[b[j]] = MAX;

}

}

#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
using namespace std;
const int M = 1e5 + 10;
int a[M] , b[M] , dp[M] , prime[M] , num[M] , cnt = 0;
void IsPrime() {
prime[0] = prime[1] = 0 , prime[2] = 1;
for(int i = 3 ; i < M ; i++) {
prime[i] = i % 2 == 0 ? 0 : 1;
}
int t = (int)sqrt(M * 1.0);
for(int i = 3 ; i <= t ; i++) {
if(prime[i]) {
for(int j = i * i ; j < M ; j += 2 * i) {
prime[j] = 0;
}
}
}
for(int i = 2 ; i < M ; i++) {
if(prime[i]) {
num[cnt++] = i;
}
}
}
int main() {
int n;
IsPrime();
scanf("%d" , &n);
int count = 0 , MAX = 0;
for(int i = 1 ; i <= n ; i++) {
scanf("%d" , &a[i]);
}
memset(dp , 0 , sizeof(dp));
for(int i = 1 ; i <= n ; i++) {
int gg = a[i] , flag = 0 , sum = 0;
MAX = 0;
for(int j = 0 ; j < cnt ; j++) {
flag = 0;
while(gg % num[j] == 0) {
flag = 1;
gg /= num[j];
}
if(flag == 1) {
b[sum++] = num[j];
}
if(gg == 1)
break;
}
for(int j = 0 ; j < sum ; j++) {
MAX = max(dp[b[j]] + 1 , MAX);
}
for(int j = 0 ; j < sum ; j++) {
dp[b[j]] = MAX;
}
}
int MM = 1;
for(int i = 0 ; i < cnt ; i++) {
MM = max(dp[num[i]] , MM);
}
printf("%d\n" , MM);
return 0;
}

codeforces 264 B. Good Sequences(dp+数学的一点思想)的更多相关文章

  1. Codeforces 1144G Two Merged Sequences dp

    Two Merged Sequences 感觉是个垃圾题啊, 为什么过的人这么少.. dp[ i ][ 0 ]表示处理完前 i 个, 第 i 个是递增序列序列里的元素,递减序列的最大值. dp[ i ...

  2. Codeforces 264 B. Good Sequences

    B. Good Sequences time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  3. CodeForces - 441E:Valera and Number (DP&数学期望&二进制)

    Valera is a coder. Recently he wrote a funny program. The pseudo code for this program is given belo ...

  4. CodeForces 447C DZY Loves Sequences DP

    题目:click here 题意:求给定序列更改其中一个元素后的最长连续上升子序列的长度 分析:最长的连续子序列有2种,一种是严格上升(没有更改元素)的长度加1,一种是两段严格上升的加起来. #inc ...

  5. CodeForces 446A DZY Loves Sequences (DP+暴力)

    题意:给定一个序列,让你找出一个最长的序列,使得最多改其中的一个数,使其变成严格上升序列. 析:f[i] 表示以 i 结尾的最长上升长度,g[i] 表示以 i 为开始的最长上升长度,这两个很容易就求得 ...

  6. CodeForces 450B Jzzhu and Sequences (矩阵优化)

    CodeForces 450B Jzzhu and Sequences (矩阵优化) Description Jzzhu has invented a kind of sequences, they ...

  7. [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆)

    [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆) 题面 一棵二叉树的所有点的点权都是给定的集合中的一个数. 让你求出1到m中所有权 ...

  8. # E. Mahmoud and Ehab and the xor-MST dp/数学+找规律+xor

    E. Mahmoud and Ehab and the xor-MST dp/数学/找规律 题意 给出一个完全图的阶数n(1e18),点由0---n-1编号,边的权则为编号间的异或,问最小生成树是多少 ...

  9. 有关动态规划(主要是数位DP)的一点讨论

    动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法.20世纪50年代初美国数学家在研究多阶段决策过程的优化问题时, ...

随机推荐

  1. Java中Timer和TimerTask来实现计时器循环触发

    package xian; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.Fi ...

  2. 通过自制yum源离线安装ansible

    系统环境 --CentOS release 7 python版本--Python 3.5.4   背景:在企业环境中,安装ansible的服务器往往不能访问互联网,简单的下载ansible源码安装,会 ...

  3. 使用vue实现行列转换的一种方法。

    行列转换是一个老生常谈的问题,这几天逛知乎有遇到了这个问题.一个前端说,拿到的数据是单列的需要做转换才能够绑定,折腾了好久才搞定,还说这个应该后端直接出数据,不应该让前端折腾. 这个嘛,行列转换在后端 ...

  4. Okhttp3 网络请求框架与 Gson

    Maven环境 : <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>o ...

  5. SpringMVC的流程

    Springmvc的流程 1.用户发送请求至前端控制器DispatcherServlet 2.DispatcherServlet收到请求后,调用HandlerMapping处理映射器,请求获取Hand ...

  6. nginx在线与离线安装

    1.场景描述 项目要部署到新的服务器上,需要安装nginx,刚好安全部门通知了nginx存在安全漏洞(Nginx整数溢出漏洞,nginx1.13.2之后的版本无问题),就下载最新的nginx进行了安装 ...

  7. xlistview错误

    apply plugin: 'com.android.library' android { compileSdkVersion buildToolsVersion '26.0.1' defaultCo ...

  8. 洛谷 P3413 SAC#1 - 萌数

    题意简述 求l~r之间存在长度至少为2的回文子串的正整数的个数 题解思路 数位DP 注意到有偶数长度的回文串必有长度为2的回文串,有奇数长度的回文串必有长度为3的回文串 所以只需判断与前一位,前两位是 ...

  9. Mysql优化-mysql分区

    背景:由于我负责i西科教务处系统,i西科用户量达到20000人左右,那么假设每人每星期10门讲课,数据库记录信息将是20万条,如果不将课程表进行分区或分表,就会造成爆表的情况,如此看来,分区是必须要做 ...

  10. SpingBoot:整合Elasticsearch7.2.0

    Spring boot 2.1.X整合Elasticsearch最新版的一处问题 新版本的Spring boot 2的spring-boot-starter-data-elasticsearch中支持 ...