专栏文章
P4411 [BJWC2010] 取数游戏 题解
P4411题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mincmg7p
- 此快照首次捕获于
- 2025/12/02 00:13 3 个月前
- 此快照最后确认于
- 2025/12/02 00:13 3 个月前
博客园 可能食用更佳。
给定 个数 ,你需要从左到右按顺序取出一些数,第一个数任取,钦定目前取的数为 ,下一个取的数为 ,需满足 ,求最大化取出数的数量。
钦定 为 的最大值,记 表示约数为 时最大的答案数量,每次 枚举 的约数,将 的数取出来更新答案即可,最终答案即为 ,时间复杂度为 ,空间复杂度为 。
CPPconst int N=5e4+5,M=1e6+5;
int n,lim,f[M];
vector<int> a[N];
int main()
{
read(n),read(lim);
for(int i=1;i<=n;i++)
{
int x; read(x);
for(int j=1;j*j<=x;j++)
if(x%j==0)
{
if(j>=lim) a[i].pb(j);
if(j*j!=x&&x/j>=lim) a[i].pb(x/j);
}
}
int ans=0;
for(int i=1;i<=n;i++)
{
int res=0;
for(auto x:a[i]) chkmax(res,f[x]+1);
chkmax(ans,res);
for(auto x:a[i]) f[x]=res;
}
write(ans);
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...