CodeForces 264B.Good Sequences(DP)

博客围绕Good Sequences问题展开,该问题要求找出满足严格递增、相邻元素不互质且元素为给定好整数的最长序列长度。给出了输入输出示例,采用动态规划(DP)方法求解,定义了dp[i]和d[i],每次转移完dp[x]后更新d[i]。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

B. Good Sequences

(2s,256M)
Squirrel Liss is interested in sequences. She also has preferences of integers. She thinks nnn integers a1, a2, ..., ana_1, a_2, ..., a_na1,a2,...,an are good.

Now she is interested in good sequences. A sequence x1, x2, ..., xkx_1, x_2, ..., x_kx1,x2,...,xk is called good if it satisfies the following three conditions:

The sequence is strictly increasing, i.e. xi &lt; xi + 1x_i &lt; x_i + 1xi<xi+1 for each i(1 ≤ i ≤ k − 1)i (1 ≤ i ≤ k - 1)i(1ik1).
No two adjacent elements are coprime, i.e. gcd(xi, xi + 1) &gt; 1gcd(x_i, x_{i + 1}) &gt; 1gcd(xi,xi+1)>1 for each i(1 ≤ i ≤ k − 1)i (1 ≤ i ≤ k - 1)i(1ik1) (where gcd(p, q)gcd(p, q)gcd(p,q) denotes the greatest common divisor of the integers ppp and qqq).
All elements of the sequence are good integers.
Find the length of the longest good sequence.

Input
The input consists of two lines. The first line contains a single integer n(1 ≤ n ≤ 105)n (1 ≤ n ≤ 10^5)n(1n105) — the number of good integers. The second line contains a single-space separated list of good integers a1, a2, ..., ana_1, a_2, ..., a_na1,a2,...,an in strictly increasing order (1 ≤ ai ≤ 105;ai &lt; ai + 1)(1 ≤ a_i ≤ 10^5; a_i &lt; a_{i + 1})(1ai105;ai<ai+1).

Output
Print a single integer — the length of the longest good sequence.

Examples
input

5
2 3 4 6 9

output

4

input

9
1 2 3 5 6 7 8 9 10

output

4

Note
In the first example, the following sequences are examples of good sequences: [2;4;6;9],[2;4;6],[3;9],[6][2; 4; 6; 9], [2; 4; 6], [3; 9], [6][2;4;6;9],[2;4;6],[3;9],[6]. The length of the longest good sequence is 444.

Solution

DP
dp[i]dp[i]dp[i]表示以iii结尾的Good Sequence
d[i]d[i]d[i]表示所有含有iii这个质因子的xxxmax(dp[x])max(dp[x])max(dp[x])
每次转移完dp[x]dp[x]dp[x]之后,再更新一下所有的d[i]d[i]d[i]即可

Code

#include <cstdio>
#include <algorithm>
#define N 100010

using namespace std;

int a[N], dp[N], d[N];
int gcd(int x, int y) {
	if (y == 0) return x;
	else return(y, x % y);
}

int main() {
	int n;
	scanf("%d", &n);
	if (n == 1) {
		printf("%d\n", 1);
		return 0;
	}
	for (int i = 1; i <= n; ++i) {
		scanf("%d", &a[i]);
	}
	int ans = 0;
	for (int i = 1; i <= n; ++i) {
		int e = a[i];
		for (int j = 2; j * j <= a[i]; ++j) {
			if (e % j == 0) {
				dp[a[i]] = max(dp[a[i]], d[j]);
				while (e % j == 0) e /= j;
			}
		}
		if (e > 1) dp[a[i]] = max(dp[a[i]], d[e]);
		dp[a[i]]++;
		ans = max(ans, dp[a[i]]);
		e = a[i];
		for (int j = 2; j * j <= a[i]; ++j) {
			if (e % j == 0) {
				d[j] = dp[a[i]];
				while (e % j == 0) e /= j;
			}
		}
		if (e > 1) d[e] = dp[a[i]];
	}
	printf("%d\n", ans);
	return 0;
}
WPS Office 2019 是一款功能丰富的办公软件套装,它整合了文字、表格、演示、PDF 等组件,具备体积小巧、功能丰富、兼容性强等特点,能满足日常办公的多种需求。 功能组件丰富:包含 WPS 文字、WPS 演示、WPS 表格、WPS PDF 等组件,可用于文档编辑、表格计算、幻灯片制作、PDF 处理等,支持 DOC、DOCX、XLS、XLSX、PPT 等多种格式,能与 Microsoft Office 较好地兼容。 支持云存储与协作:用户登录 WPS 账号后,可实现多终端、跨平台的数据同步,还能与他人协同办公,文档可通过微信、QQ 等社交平台一键分享。 PDF 功能强大:提供沉浸式 PDF 阅读体验和稳定的编辑服务,支持一键编辑 PDF 文档内容。借助 OCR 技术,可精准转换文档、表格、PPT、图片等格式的文件。 界面设计优化:具有全新视觉设计,默认皮肤舒适清爽,还支持桌面背景、界面字体、皮肤、格式图标等个性化设置。同时,文档标签可拖拽成独立窗口或合并,用户可自主选择文档显示方式,还能将文件放置在不同工作区,便于分类浏览与管理。 内置实用工具:内置了简单的网页浏览器,点击文档中的链接会默认用其打开,可进行网页添加到首页、另存为 PDF 等操作。此外,“应用中心” 集成了输出转换、文档助手、安全备份等多种实用功能。 模板资源丰富:稻壳商城提供了大量模板、范文、图片等素材资源,涵盖求职简历、总结计划、合同协议等常见文档类型,方便用户快速创建专业文档。 表格功能特色突出:支持通过关键词快速切换工作表,设有阅读模式和护眼模式。还可分类合并单元格,以及拆分合并单元格并填充内容。公式编辑器中可轻松完成公式嵌套,筛选时可通过 “仅筛选此项” 一步完成特定值筛选,还能根据筛选条件生成动态分析图表。另外,“特色功能” 和 “智能工具箱” 菜单中包含 PDF
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值