01 交换串 题解

news/2024/10/6 2:46:11/文章来源:https://www.cnblogs.com/XuYueming/p/18444469

题意简述

给定一个长为 \(n\)\(\tt 01\)\(s\),你需要对 \(s\) 进行恰好 \(m\) 次交换,每次只能交换相邻的不同字符,最大化操作后 \(s\) 的价值。\(s\) 的价值被定义为,对于每一个 \(i\),记 \(1 \sim i - 1\) 中,和 \(s_i\) 不同的 \(s_j\)\(l\) 个,\(r\) 同理,\(f(s_i, i, l, r)\) 的和就是 \(s\) 的价值。

对于原题,是最大化得到的串中子序列 \(\tt 0010\)\(\tt 1101\) 的总数。其实,此时 \(f(s_i, i, l, r) = \dfrac{l(l-1)}{2} r\)。我们的 \(f\) 完全可以更复杂,比如加入 \((-1) ^ {s_i} v_i\) 的系数,\(l^{i - 1} r^{n - i}\) 等奇怪的东西。

\(n, m \leq 500\),保证 \(s\) 可以操作。

题目分析

首先,根据大名鼎鼎的「\(\tt 01\) 守恒定理」,\(\tt 01\) 不会凭空产生,也不会凭空消失,操作前后 \(s\)\(0 / 1\) 的数量没有发生变化。

我们进而发现,我们只会交换不同的字符,那么相同的字符之间的相对位置关系也是确定了的。这样,我们可以计算到达最终的字符串需要进行多少步,就是每一个 \(0\) 或每一个 \(1\),对应后位置之差绝对值之和。

我们考虑 DP,记 \(f'_{i, j, k}\) 表示最终字符串,已经决策前 \(i\) 位,前 \(i\) 位中有 \(j\)\(0\)\(i - j\)\(1\)\(0\) 的位置之差绝对值之和为 \(k\),的 \(\max \sum f\)。转移时,按照 \(s_i = 0 / 1\) 分类转移即可。其实分析到这里,代码就很好敲了。

\(0 / 1\) 出现次数为 \(c_{0 / 1}\),原串中每个 \(1\) 出现的位置序列为 \(p\),转移方程:

\[\begin{aligned} \large f'_{i + 1,\ j,\ k} &\gets f'_{i,\ j,\ k} + f(1, i + 1, j, c_0 - j) \\ \large f'_{i + 1,\ j + 1,\ k + \vert p_{j + 1} - (i + 1) \vert} &\gets f'_{i,\ j,\ k} + f(0, i + 1, i - j, c_1 - (i - j)) \end{aligned} \]

其中 \(a \gets b\) 表示 \(a = \max \{ a, b \}\)

最终答案是 \(f'_{n,\ c_0,\ m}\) 吗?我们可以交换两次相邻不同的位置,浪费 \(2k\) 次操作,所以答案为 \(\max \limits _ {k = 0} ^ {\left\lfloor \dfrac{m}{2} \right\rfloor} f'_{n,\ c_0,\ m - 2k}\)

代码

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;const int N = 520;int n, m;
char str[N];int $0[N], $1;
int f[2][N][N], ans;
inline void tomax(int &a, int b) { b > a && (a = b); }signed main() {#ifndef XuYuemingfreopen("b6e6.in", "r", stdin);freopen("b6e6.out", "w", stdout);#endifscanf("%s%d", str + 1, &m);for (; str[n + 1]; ++n);for (int i = 1; i <= n; ++i) {if (str[i] == '0') $0[++*$0] = i;else ++$1;}memset(f[0], 0xff, sizeof (f[0]));f[0][0][0] = 0;for (int i = 0, t; i <= n - 1; ++i) {memset(f[(i + 1) & 1], 0xff, sizeof (f[(i + 1) & 1]));for (int j = max(0, i - $1); j <= i && j <= *$0; ++j)for (int k = 0; k <= m; ++k)if (~f[i & 1][j][k]) {tomax(f[(i + 1) & 1][j][k], f[i & 1][j][k] + (j * (j - 1) >> 1) * (*$0 - j));if (j == *$0) continue;t = k + abs($0[j + 1] - i - 1);if (t <= m)tomax(f[(i + 1) & 1][j + 1][t], f[i & 1][j][k] + ((i - j) * (i - j - 1) >> 1) * ($1 - (i - j)));}}for (int i = m; i >= 0; i -= 2)ans = max(ans, f[n & 1][*$0][i]);printf("%d", ans);return 0;
}

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

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

相关文章

记一次内存告警

刚好国庆最后一天上班,遇到一个实例内存使用率100%的告警。 分析JVM内存常用的命令得总结一下:

Leetcode 275. H 指数 II

1.题目基本信息 1.1.题目描述 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数,citations 已经按照 升序排列 。计算并返回该研究者的 h 指数。 h 指数的定义:h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她…

7、卷积神经网络基础

1、边缘检测示例(Edge Detection Example)卷积运算(convolutional operation)是卷积神经网络最基本的组成部分,使用边缘检测(edge detection)作为入门样例。接下来,你会看到卷积是如何进行运算的。在之前的人脸例子中,我们知道神经网络的前几层是如何检测边缘的,然后…

truffle 和 ganache 打印账号列表和发送eth

打印 ganache环境的账户列表const localhost = "http://127.0.0.1:7545"; const {Web3} = require("web3"); const web3 = new Web3(new Web3.providers.HttpProvider(localhost));web3.eth.getAccounts().then(function (result) {console.log("账户…

前端无代码-表单页面的查看和编辑| uiotos致敬amis、appsmith、codewave、goview、dataroom、iotrouter、FUXA、乐吾乐、dooring等

上位机或管理系统,增删改查属于常规操作。其中以点击以查看和编辑,弹出表单页面,最为常见。 UIOTOS支持页面嵌套、属性继承(包括只读属性)。通过配置和连线,也能对表单页面区分查看和编辑,但有些繁琐。 可以利用容器组件的表单只读属性,勾选后,连线传入表单数据,将只…

前端零代码-技术原理:对话框嵌套和自定义按钮| uiotos致敬amis、appsmith、codewave、goview、dataroom、iotrouter、FUXA、乐吾乐、dooring等

对话框有默认标题头和脚,带有默认的取消、确定、关闭等按钮: 对话框编辑状态和运行状态 UIOTOS中对话框属常见容器,内容由任意其他页面嵌套而来。如下所示: UIOT…

数字经济与新质生产力:地理信息与遥感视角下的深度分析

在数字化浪潮的推动下,我们正见证着生产力的一次历史性飞跃。数字经济如何重塑生产力的三大要素:劳动对象、劳动资料和劳动者?让我们来深度分析数字经济如何推动新质生产力的发展。一、数字经济与地理信息的融合地理信息与遥感技术是数字经济中不可或缺的一环。它们为我们提…

土地资源的可持续管理:探索长期利用的绿色路径

在全球化与城市化的双重驱动下,土地资源的可持续管理已成为保障人类福祉与地球健康的迫切议题。本文将深入剖析实现土地资源长期可持续利用的策略与实践,从理论到实践,全方位探索这条绿色发展的必由之路。一、土地资源的现状与挑战当前,土地退化、耕地减少、城市蔓延、生态…

超轻巧modbus调试助手使用说明

一、使用说明 1.1 数据格式和其他的modbus采集工具一样,本组件也支持各种数据格式,其实就是高字节低字节的顺序。 一般是2字节表示一个数据,后面又有4字节表示一个数据,目前好像还有8字节表示一个数据的设备。 不同厂家的设备对应的字节顺序可能不同,要求可以自定义顺序,…

南沙C++信奥赛陈老师解一本通题 1984:【19CSPJ普及组】纪念品

​【题目描述】小伟突然获得一种超能力,他知道未来 T 天 NN种纪念品每天的价格。某个纪念品的价格是指购买一个该纪念品所需的金币数量,以及卖出一个该纪念品换回的金币数量。 每天,小伟可以进行以下两种交易无限次: 1.任选一个纪念品,若手上有足够金币,以当日价格购买该…

VMware ESXi 7.0U3q macOS Unlocker OEM BIOS 2.7 Dell HPE 联想定制版 9 月更新发布

VMware ESXi 7.0U3q macOS Unlocker & OEM BIOS 2.7 Dell HPE 联想定制版 9 月更新发布VMware ESXi 7.0U3q macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版 ESXi 7.0U3 标准版,Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)、Fujitsu (富…

SQL Server 2022 RTM Cumulative Update #15 发布下载

SQL Server 2022 RTM Cumulative Update #15 发布下载SQL Server 2022 RTM Cumulative Update #15 发布下载 最新的累积更新 (CU) 下载,包含自 SQL Server 2022 RTM 发布以来的所有更新。 请访问原文链接:https://sysin.org/blog/sql-server-2022/,查看最新版。原创作品,转…