当前位置: 首页 > news >正文

『JROI-4』沈阳大街 2

这题很有意思阿。

首先把 \(A, B\) 放一起从大到小排序得到序列 \(C\),原先在 \(A\) 的点染红色否则染蓝色,就变成了以任意顺序匹配 \(n\) 对红蓝点,且权值为后面出现的点。

\(f_{i, j}\) 表示前 \(i\) 个点匹配了 \(j\) 对,则有方程:

\[f_{i, j} = f_{i - 1, j - 1} \times C_i \times (tmp - (j - 1)) + f_{i - 1, j} \]

其中 \(tmp\) 是当前与 \(i\) 颜色不同的点个数。

时间复杂度 \(\mathcal{O}(n^2)\)

点击查看代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
// typedef __int128 i128;
typedef pair<int, int> pii;
const int N = 5e3 + 10, mod = 998244353;
template<typename T>
void dbg(const T &t) { cout << t << endl; }
template<typename Type, typename... Types>
void dbg(const Type& arg, const Types&... args) {cout << arg << ' ';dbg(args...);
}
namespace Loop1st {
int n, a[N], b[N], f[N], g[N], s[2][N << 1];
pii c[N << 1];
int qpow(int a, int b) {int res = 1;for (; b; b >>= 1, a = (ll)a * a % mod) if (b & 1) res = (ll)res * a % mod;return res;
} 
void main() {cin >> n;for (int i = 1; i <= n; i++) cin >> a[i], c[i] = {a[i], 0};for (int i = 1; i <= n; i++) cin >> b[i], c[i + n] = {b[i], 1};int m = n << 1;sort(c + 1, c + m + 1, greater<pii>());f[0] = 1;for (int i = 1; i <= m; i++) {memset(g, 0, sizeof g);s[0][i] = s[0][i - 1]; s[1][i] = s[1][i - 1];s[c[i].second][i]++;int tmp = s[!c[i].second][i];for (int j = 0; j <= min(n, i); j++) {g[j] = f[j];if (j <= tmp) g[j] = (g[j] + (ll)f[j - 1] * c[i].first % mod * (tmp - j + 1) % mod) % mod;}memcpy(f, g, sizeof f);}int ans = f[n], fac = 1;for (int i = 1; i <= n; i++) fac = (ll)fac * i % mod;cout << (ll)ans * qpow(fac, mod - 2) % mod << '\n';
}}
int main() {// freopen("data.in", "r", stdin);// freopen("data.out", "w", stdout);ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int T = 1;// cin >> T;while (T--) Loop1st::main();return 0;
}

这题还是很好的,下面总结一下:

  1. 有关 min/max 的 DP 可以考虑排序。
  2. 排列计数有时可以转化为匹配问题。
http://www.gsyq.cn/news/159536.html

相关文章:

  • [quote]all the wood behind one arrow
  • [从程序员到架构师] 微服务场景实战 - 注册发现
  • Java毕设项目推荐-基于Java的网上宠物店管理系统宠物销售、服务预约、库存管理、客户互动【附源码+文档,调试定制服务】
  • Elasticsearch核心原理——倒排索引、映射与分词对搜索质量的影响路径
  • Cucumber特性文件编写规范
  • 汽车领域智能体构建全解析—腾讯云黑客松Agent应用创新挑战赛微信公众号赛道实战复盘
  • nt!MiInitializeLoadedModuleList分析和全局变量nt!PsLoadedModuleList初始化和LoaderBlock->LoadOrderListHead的关系非常重要
  • transformer-explainer
  • 自动化测试覆盖率:达到90%+的实战体系构建
  • 【毕业设计】基于Java的网上宠物店管理系统基于Java技术的智慧宠物店管理系统设计(源码+文档+远程调试,全bao定制等)
  • 【Week1_Day1】软件测试每周学习记录与反思
  • 基于纳米微粒激发平面波的米氏散射FDTD仿真模拟与验证
  • 【开题答辩全过程】以 河金新生报到管理APP为例,包含答辩的问题和答案
  • 鸿蒙6核心功能实战:手把手教你开发分布式协同小应用
  • 饰品商拍提效:AI图生图实现白底图转上身图
  • mtr
  • java计算机毕业设计小学生在线数学学习平台 轻量级Java毕业设计:小学生数学在线教学与测评一体化平台 基于SpringBoot的小学生数学互动学习及智能作业系统
  • 面向 K8s 1.33 的 Linux 服务器深度运维实战(CentOS/RedHat/Ubuntu 通用)
  • springboot城镇保障性住房管理系统(11594)
  • 基于SpringBoot+Vue的学生捐赠物品管理系统设计与实现毕设
  • springboot基于java的教学辅助平台(11595)
  • 基于SpringBoot+Vue的图书馆选座平台设计与实现毕设源码
  • Post-training with Tinker:定制语言模型的最佳解决方案
  • 告别“卡顿”与“依赖”,国产数据库文档兼容版:国产化替代的性能王者来了!
  • 腾讯游戏开局第一课课程笔记
  • java计算机毕业设计校园车辆门禁管理系统 高校智能车行闸机云平台的设计与实现 基于SpringBoot的校园车辆出入与收费一体化系统
  • 第三章 遗传物质的分子基础
  • 百亿量化私募高薪急招C++,应届,社招都看春招/秋招/校招/社招,23/24/25/26届都可base北上杭深现招岗位:C++量化系统开发工程师年base40-80万+bonus通
  • 基于SpringBoot的房屋交易平台的设计与实现毕业论文+PPT(附源代码+演示视频)
  • AI CRM如何让你的销售流程自己跑起来,用AI激活销售漏斗