CF889E题解
修正
感谢学长
题意
给一个序列,对于一个非负整数
求出上式的最大值。
思路
先去寻找题目的性质。
首先
对于上述两条,我们首先能够总结出一点:一定存在一个答案区间
然后对于这道题有一个显然的暴力
考虑能否优化状态。因为答案区间是一段一段的递减,其实我们枚举
所以我们得到了最终的
- 直接转移到
:这时 变小,答案加上 的高度; - 每次新维护一个
:答案加上的高度类比第一种即可。
存在第二种转移是因为性质一告诉我们一定会有一个
关于复杂度的话,考虑对于每个
代码
signed main(){
n = rd(), res[p = rd() - 1] = 0;
for(int i = 2; i <= n; ++i){
p = rd();
for(map < ll , ll > :: iterator it = res.lower_bound(p); it != res.end(); res.erase(it++)){
ll j = (*it).first, f = (*it).second;
res[j % p] = max(res[j % p], f + (i - 1) * (j - j % p));
res[p - 1] = max(res[p - 1], f + (i - 1) * ((j + 1) / p * p - p));
}
}
for(map < ll , ll > :: iterator it = res.begin(); it != res.end(); it++)ans = max(ans, n * (*it).first + (*it).second);
printf("%lld", ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)