尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

CF2003F. Turtle and Three Sequences

CF2003F. Turtle and Three Sequences
📅 发布时间:2026/6/19 12:08:43

给你三个长为 \(n\) 的序列 \(a,b,c\)。

求所有满足一下条件的 \([1,2,\cdots,n]\) 的长为 \(m\) 的子序列 \(p_1,p_2,\cdots,p_m\) 中,\(\sum_{i=1}^m c_{p_i}\) 的最大值

  • \(a_{p_1}\le a_{p_2}\le\cdots\le a_{p_m}\)。
  • \(\forall i \neq j,b_{p_i} \neq b_{p_j}\),即 \(b_i\) 互异。

\(1\le a_i,b_i\le n\le 3\times 10^3,1\le m\le 5\)


我们发现 \(b_i\) 互不相同这个条件非常难办,所以肯定要把它给转化掉。

有两种方法。

第一种是我们考虑,假如把第二个条件改成 \(b\) 单增,那么就是二维偏序,可以 \(\mathcal O(nm\log^2 n)\) 解决。

那么我们每次把 \(b\) 映射到一个随机的排列,有 \(\frac{1}{m!}\approx .008\) 的概率答案中的 \(b\) 被映射到单增序列上。

那么做多次即可,时间复杂度 \(\mathcal O(nm\log^2n \times m!)\)。

第二种是题解做法,我们考虑把每种颜色映射到 \(1\sim m\) 中的随机一种,然后直接状压,复杂度 \(O(n\log n2^m)\)。

正确率为答案中的 \(b\) 刚好被映射到排列上,也就是 \(\frac{m!}{m^m} \approx .03\)。

时间复杂度 \(\mathcal O(2^mn\log n \times \frac{m^m}{m!})\)。


我写的第一种,卡了好久才过 /ll

#include <algorithm>
#include <iostream>
#include <random>const int N = 3001, M = 512;std::mt19937 rnd(std::random_device{}());auto upd = [](auto& x, auto&& y) {x = std::max(x, y);
};struct Matr {int matr[N][M];inline void add(int x, int y, int z) {for(; x < N; x += x & -x)for(int j = y; j < M; j += j & -j)upd(matr[x][j], z);}inline int sum(int x, int y) {int z = 0;for(; x; x -= x & -x)for(int j = y; j; j -= j & -j)upd(z, matr[x][j]);return z;}inline void clear(int x, int y) {for(; x < N; x += x & -x)for(int j = y; j < M; j += j & -j)matr[x][j] = 0;}
};Matr Mat[4];
int n, m, a[N], rb[N], b[N], c[N], w[N], q[N];int solve() {std::shuffle(w + 1, w + n + 1, rnd);for(int i = 1; i <= n; ++i) b[i] = w[rb[i]];int ans = 0;for(int i = 1; i <= n; ++i) {Mat[0].add(a[i], b[i], c[i]);for(int t = 1; t < m - 1; ++t)if(auto val = Mat[t-1].sum(a[i], b[i]-1); val)Mat[t].add(a[i], b[i], val + c[i]);if(auto val = Mat[m-2].sum(a[i], b[i]-1); val)upd(ans, val + c[i]);}for(int i = 1; i <= n; ++i) for(int x = a[i]; x < N; x += x & -x)for(int y = b[i]; y < M; y += y & -y)for(int t = 0; t < m - 1; ++t)Mat[t].matr[x][y] = 0;return ans;
}int T = clock();int main() {std::ios::sync_with_stdio(0), std::cin.tie(0), std::cout.tie(0);std::cin >> n >> m;for(int i = 1; i <= n; ++i) std::cin >> a[i];for(int i = 1; i <= n; ++i) std::cin >> rb[i];for(int i = 1; i <= n; ++i) std::cin >> c[i];for(int i = 1; i <= n; ++i) w[i] = i % (M - 1) + 1;if(m == 1) {int _ans = 0;for(int i = 1; i <= n; ++i)upd(_ans, c[i]);std::cout << _ans << "\n";} else {int _ans = 0;for(int T = 666; T--; )upd(_ans, solve());if(_ans == 0) std::cout << "-1\n";else std::cout << _ans << "\n";}
}

相关新闻

  • Python 标准库 unittest 不同遮掩方式的比较
  • 天线增益与有源接收面积之间的关系
  • 流量分析

最新新闻

  • Poetry在NVIDIA AI工程中的硬件感知依赖管理实践
  • 皮肤疾病AI辅助诊断系统:轻量CNN+临床可解释性实战
  • Jable视频下载工具:让离线观看变得简单高效的终极解决方案
  • 2026年6月最新浪琴中国官方售后网点客户电话服务热线地址 - 浪琴服务中心
  • 2026宁波废品回收排行榜TOP5,这些电话你打对了吗? - 速递信息
  • DeepSeek-V4推理效率革命:CSA+HCA混合注意力与mHC流形连接实战解析

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号