2023大厂真题提交网址(含题解):
www.CodeFun2000.com(http://101.43.147.120/)
最近我们一直在将收集到的机试真题制作数据并搬运到自己的OJ上,供大家免费练习,体会真题难度。现在OJ已录入50+道2023年最新大厂真题,同时在不断的更新。同时,可以关注"塔子哥学算法"公众号获得每道题的题解。
题目大意:
给你一个序列
a
i
a_i
ai,让你将其重新排列使得
∑
i
=
1
n
g
c
d
(
a
1
,
.
.
.
,
a
i
)
\sum_{i=1}^{n}gcd(a_1,...,a_i)
∑i=1ngcd(a1,...,ai)最大
n
≤
1
e
5
,
a
i
≤
5
e
6
n \leq 1e5 , a_i \leq 5e6
n≤1e5,ai≤5e6
分析:
最后的答案展开后值域一定是分块的,类似于
a
,
a
,
a
,
b
,
b
,
c
,
c
,
.
.
a,a,a,b,b,c,c,..
a,a,a,b,b,c,c,..
且整体值域是递减的,且任意两个数满足约数关系
所以我们动态规划的转移也可以遵循以上规律:
令
d
p
(
i
)
dp(i)
dp(i)代表以
i
的倍数
i的倍数
i的倍数为开头的序列的最大和
d p ( i ) = m a x d ∣ i { d p ( d ) + ( c n t [ d ] − c n t [ i ] ) ∗ i } dp(i)=max_{d|i}^{}\{dp(d)+(cnt[d]-cnt[i])*i\} dp(i)=maxd∣i{dp(d)+(cnt[d]−cnt[i])∗i}
注意: c n t [ i ] cnt[i] cnt[i]代表序列中有多少个数是 i i i的倍数