题解:CF573D Bear and Cavalry

news/2024/9/25 16:28:34/文章来源:https://www.cnblogs.com/Lydic/p/18431592

因为这是远古题目,所以根据现在的评测机速度,用 \(O(nq)\) 的做法也是可以过的。

也就是说,我们可以每次操作直接修改对应位置上的数字,然后设计一种 \(O(n)\) 的算法求解答案。

这道题类似资源分配型动态规划,所以我们可以设 \(dp_i\) 表示分配前 \(i\) 个人的答案。

直接写是不行的,我们根据排序不等式先把 \(a\)\(b\) 数组排序,然后进行转移。首先有一个结论,在当前的状态下,\(i\) 只能由 \([i-2,i]\) 中间的状态转移过来,因为我们要求人和马连边以后逆序对数量最少,但是因为题目限制,所以 \([i-2,i]\) 之间的状态我们都需要考虑。

所以我们分四种情况转移,画个图方便理解(图很丑谅解一下):

然后根据上图我们可以列出来四个方程:

\[dp_i=\max \left\{ \begin{array}{lc} dp_{i-1}+a_ib_i&ch(i,i)\\ dp_{i-2}+a_ib_{i-1}+a_{i-1}b_i&ch(i,i-1)~and~ ch(i-1,i)\\ dp_{i-3}+a_ib_{i-2}+a_{i-2}b_{i-1}+a_{i-1}b_{i}&ch(i-2,i-1)~and~ch(i-1,i)~and~ch(i,i-2)\\ dp_{i-3}+b_ia_{i-2}+b_{i-2}a_{i-1}+b_{i-1}a_{i}&ch(i-2,i)~and~ch(i,i-1)~and~ch(i-1,i-2)\\ \end{array} \right. \]

其中 \(ch(i,j)\) 的含义是 \(a_i\)\(b_j\) 可以匹配。

为了维护 \(ch\) 这个条件,我们不妨存储 \(a\) 数组和 \(b\) 数组每个元素的编号,并设立一个新数组 \(fa\),然后令 \(fa_i\) 表示 \(a_i\) 对应的 \(b\) 的编号。

然后我们可以给出 \(ch\) 的代码。

bool ch(int x,int y)
{return fa[a[x].id]!=b[y].id&&x>0&&y>0;
}

每次修改的时候对于修改的两个位置 \(x,y\) 我们直接交换 \(fa_x\)\(fa_y\) 即可。

然后这道题就结束了。

提交记录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/803537.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

题解:AT_abc204_e [ABC204E] Rush Hour 2

LG变形的 dijkstra。 先思考什么情况下需要等待以及等待多长时间最优。我们把题目上的计算方法按照当前的时间 \(t\) 和通过所需的时间 \(f(t)\) 列个函数关系: \[f(t)=t+c+\lfloor \frac{d}{t+1}\rfloor \]然后用 Desmos 画个图可以得到图像(其实就是对勾函数):因为 \(c,d…

Rust字符串类型全解析

字符串是每种编程语言都绕不开的类型, 不过,在Rust中,你会看到远比其他语言更加丰富多样的字符串类型。 如下图:为什么Rust中需要这么多种表示字符串的类型呢? 初学Rust时,可能无法理解为什么要这样设计?为什么要给使用字符串带来这么多不必要的复杂性? 其实,Rust中对…

AI自动生成代码注释

在vscode 中安装 TONGYI Lingma

通过 Tampermonkey 实现学习通全自动刷课

本文介绍了如何使用 Tampermonkey 这一流行的用户脚本管理器,通过其脚本库实现学习通的全自动刷课。文章详细讲解了 Tampermonkey 的安装步骤、OCS 脚本的配置方法,以及题库的使用流程,帮助读者高效完成学习任务。在学习过程中,自动化工具能大大提升学习效率。Tampermonkey…

KBU1010-ASEMI单向整流桥KBU1010

KBU1010-ASEMI单向整流桥KBU1010编辑:ll KBU1010-ASEMI单向整流桥KBU1010 型号:KBU1010 品牌:ASEMI 封装:KBU-4 批号:2024+ 类型:单向整流桥 电流(ID):10A 电压(VF):1000V 安装方式:直插式封装 特性:大功率、整流扁桥 产品引线数量:4 产品内部芯片个数:4 产品内部…

Kubernetes中Ingress的原理和配置

Ingress的概念和作用 Ingress是Kubernetes集群中的一个对象,用于将外部流量路由到集群内部的服务。它充当了进入Kubernetes集群的API网关,负责接收外部请求,并将其转发到正确的目标服务上。 Ingress通常通过HTTP和HTTPS提供对服务的访问,并支持基于主机名、路径以及其他HTT…

《如 何 速 通 一 套 题》4.0

A sprial 找规律。直接做。 #include <bits/stdc++.h> #define int long long using namespace std;int t, n;int sqrtll(int n) {int l = 1, r = 1000000, ans = 0;for(; l <= r; ) {int mid = (l + r) >> 1;if(mid * mid >= n) {ans = mid, r = mid - 1;}e…

自定义表格样式

HTML:<div class="table-container"><table style="width: 90%; margin-left: 5%"><tr class="table-title"><th style="width: 33%">科室名称</th><th style="width: 33%">当日登录次…

Bash脚本基本语法

一、Bash脚本以及相关介绍Bash脚本是一种在Unix或Linux操作系统中广泛使用的脚本语言,它允许用户编写一系列命令,这些命令将被Bash(Bourne-Again SHell)解释器执行。Bash脚本可以用于自动化各种任务,比如文件管理、程序执行、系统维护等。 编写Bash脚本的基本步骤包括:创…

【vulhub】Discuz-任意文件删除

【vulhub】Discuz-任意文件删除 0x00漏洞介绍 通过配置个人信息的属性值,导致文件删除。 影响版本Discuz <= 3.40x01 搭建环境 数据库服务器填写db(必须db,不然安装失败),数据库名为discuz,数据库账号密码均为root,管理员密码任意。填写联系方式页面直接点击跳过本步…

2024年开源API工具盘点,覆盖API全生命周期

2024年经济持续低迷,本文整理一些免费的开源工具,旨在帮助企业组织降低工具的支出成本,能用免费的何必用付费的呢(狗头)? 如何高效地管理API的全生命周期——从设计、开发、测试、部署到监控和优化,已经成为每个开发者和技术团队关注的重点。以下工具清单,无论你是刚刚…