P3736 [HAOI2016]字符合并 题解

科技中介服务机构如何高效完成技术成果的筛选与匹配服务?.docx 科技中介服务机构如何高效完成技术成果的筛选与匹配服务? 立即下载

发现 2≤k≤82 \leq k \leq 82≤k≤8,于是可以考虑状压 DP。

我们可以设 f[l][r][S]f[l][r][S]f[l][r][S] 表示区间 [l,r][l, r][l,r] 经过若干次操作变成 01 串 SSS 的最大分数。

基于贪心的思想,我们一定要使得整个 01 串最终不可操作,所以 01 串 SSS 的长度不超过 k−1k - 1k−1,否则 SSS 可以继续进行合并,直到其长度小于等于 k−1k - 1k−1。

那么我们有一个很暴力的做法:

对于 l,rl, rl,r,枚举中点 midmidmid,再枚举区间 [l,mid][l, mid][l,mid] 和 [mid+1,r][mid + 1, r][mid+1,r] 的所有状态,同时枚举合并的区间 [p,p+k−1][p, p + k - 1][p,p+k−1],直接转移即可。

这样做的时间复杂度是 O(kn322k−2)O(kn^32^{2k - 2})O(kn322k−2) 的,会 T 飞。

这个时候,一般的想法是找到一些有利于统计的性质。


我们会发现,一个 ppp 可能会被多个区间枚举到,但是它们转移的效果是一样的。

举个例子:

假设我们有两个区间 [l1,r1],[l2,r2][l_1, r_1], [l_2, r_2][l1​,r1​],[l2​,r2​]。

前者枚举出的状态分别为:00010,1010000010, 1010000010,10100;

后者枚举出的状态分别为:00101,0100000101, 0100000101,01000;

如果前者取区间 [4,8][4, 8][4,8] 合并,后者取区间 [3,7][3, 7][3,7] 合并,那么上面的两个区间合并出来是等价的。

所以我们遵从最简化原则,对于每个区间,我们钦定后面一部分区间(即 [mid+1,r][mid + 1, r][mid+1,r] 这一部分)的状态只能为 0 或 1(即长度为 1 的 01 串)。实际上,这样的操作相当于不断往一个串中添 0 或 1。

接着,我们可以发现,长度为 lenlenlen 的串,最终一定会被操作成长度为 (len−1) mod (k−1)+1(len - 1)\bmod (k - 1) + 1(len−1)mod(k−1)+1 的串。也就是说,只要最初的 01 串的长度是确定的,那么最终的 01 串长度同样是确定的。

所以,如果一段区间的长度 lenlenlen 满足 (len−1) mod (k−1)=0(len - 1)\bmod (k - 1) = 0(len−1)mod(k−1)=0,那么经过若干次操作后,这个区间一定可以变成长度为 1 的 01 串。

因此,枚举 midmidmid 时,我们不需要一个个位置地枚举,只需要满足 (r−mid−1) mod (k−1)=0(r - mid - 1) \bmod (k - 1) = 0(r−mid−1)mod(k−1)=0 即可。

(所以,DP 状态中的 SSS 实际上可能带有若干个前导 0,取决于最终变成的 01 串的长度)


综合上述性质,我们就有了时间复杂度是 O(n2⌊nk⌋2k−1)O(n^2\lfloor\frac{n}{k}\rfloor 2^{k - 1})O(n2⌊kn​⌋2k−1) 的做法,不过这只是一个上界,并且区间 DP 本身就是跑不满的,所以这个复杂度是可以通过的。

但是,上述做法就不能在转移的过程中计算答案了。

不过,结合前面的这句 “实际上,这样的操作相当于不断往一个串中添 0 或 1”,我们可以发现,当 (len−1) mod (k−1)=0(len - 1) \bmod (k-1) = 0(len−1)mod(k−1)=0 时,01 串中正好添加了 kkk 个字符。此时,我们就可以把它们再合并一次,同时计算答案了。

代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cassert>
#include<cstring>

#define MAXN 305
#define MAXM 8

using LL = long long;
using namespace std;

int n, k, a[MAXN], c[1 << MAXM];
LL ans, w[1 << MAXM], f[MAXN][MAXN][1 << MAXM];
const LL INF = 0x3F3F3F3F3F3F3F3F;

int main()
{
    #ifdef FILE
        freopen("Input.in", "r", stdin);
        freopen("Output.out", "w", stdout);
    #endif
    scanf("%d%d", &n, &k);
    for(register int i = 1; i <= n; i++) scanf("%d", a + i);
    for(register int i = 0; i < (1 << k); i++) scanf("%d%lld", c + i, w + i);
    for(register int i = 1; i <= n; i++) for(register int j = 1; j <= n; j++) for(register int S = 0; S < (1 << k); S++) f[i][j][S] = -INF;
    for(register int i = 1; i <= n; i++) f[i][i][a[i]] = 0;
    for(register int len = 2; len <= n; len++)
    {
        for(register int l = 1, r = l + len - 1; r <= n; ++l, ++r)
        {
            int t = (len - 1) % (k - 1);
            if(t == 0) t = k - 1;
            for(register int mid = r - 1; mid >= l; mid -= k - 1)
            {
                for(register int S = 0; S < (1 << t); S++)
                {
                    f[l][r][S << 1] = max(f[l][r][S << 1], f[l][mid][S] + f[mid + 1][r][0]);	//添加一个 0
                    f[l][r][S << 1 | 1] = max(f[l][r][S << 1 | 1], f[l][mid][S] + f[mid + 1][r][1]);	//添加一个 1
                }
            }
            if(t == k - 1)	//再次合并
            {
                LL g[2] = {-1LL, -1LL};
                for(register int S = 0; S < (1 << k); S++) g[c[S]] = max(g[c[S]], f[l][r][S] + w[S]);
                f[l][r][0] = g[0], f[l][r][1] = g[1];
            }
        }
    }
    ans = -INF;
    for(register int i = 0; i < (1 << (k - 1)); i++) ans = max(ans, f[1][n][i]);
    printf("%lld\n", ans);
    return 0;
}

END\mathit{END}END

coppeliasim+gym+sac机械臂到位实验 urdf文件 立即下载

相关推荐

产业园区如何通过数智工具精准识别企业技术需求,提高服务匹配效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

[HAOI2016]字符合并(ing)

[HAOI2016]字符合并 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数。得到的新字符和分数由这 k 个字符确定。你需要求出你能获得的最大分数。 输入描述: 第一行两个整数n,k。 接下来一行长度为n的01串,表示初始串。 接下来2k行,每行一个字符ci和一个整数wi,ci 表示长度为k的01

qq_35975367的博客 427

产业园区运营负责人怎样利用数智工具提升企业技术需求对接效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

【题解】「HAOI2016」字符合并

题目描述 有一个长度为n 的01 串,你可以每次将相邻的k 个字符合并,得到一个新的字符并获得一定分数。得到的新字符和分数由这k 个字符确定。你需要求出你能获得的最大分数。 solution: 可以看出本题的解法是区间DP。我们发现,区间[l,r]每次操作的区间不会有交集,因为假设最后只剩了几个点,但这几个点其实是有一个完整的区间变过来的。换句话说,在最后一次合并之前,左右两个区间应该是独立操作的。我们称这样的问题具有可划分性。 再看数据n<=300n<=300n<=300,可以放心大胆地

cqbzlydd的博客 703

搜素引擎+p2p+电脑全域搜素+快速检索文件

快速搜索电脑内一切文件,反应超快

三相电压型PWM整流器PI双闭环控制Matlab仿真

内容概要:本文系统介绍了三相电压型PWM整流器的PI双闭环控制系统在Matlab/Simulink环境下的建模与仿真方法,重点阐述电压外环与电流内环的协同控制机制,通过PI调节器实现直流侧电压稳定控制及交流侧单位功率因数运行。内容涵盖电压定向控制(VOC)、空间矢量PWM(SVPWM)调制策略、电网不平衡条件下的功率平衡控制等关键技术,并延伸至维也纳(Vienna)整流器、中点电压平衡、滞环电流控制等多种先进拓扑与控制方法。配套提供Mathcad计算书,支持不同功率等级下的参数设计、闭环建模与工程化实现,形成从理论分析到仿真验证的完整技术链条,适用于电力电子系统科研与教学实践。; 适合人群:电气工程、电力电子及相关专业的研究生、科研人员,以及具备Matlab/Simulink仿真基础的工程技术人员。; 使用场景及目标:① 掌握三相PWM整流器双闭环PI控制系统的建模、仿真与动态性能分析;② 深入理解电压定向控制、SVPWM调制及电网不平衡工况下的先进控制策略;③ 利用Mathcad计算工具完成实际工程中整流器的参数设计与优化。; 阅读建议:建议结合Simulink仿真模型与Mathcad计算书同步学习,重点关注控制架构搭建、PI参数整定方法、系统稳定性分析及不同工况下的仿真验证,通过反复调试提升对控制性能的理解与工程应用能力。

[HAOI2016]字符合并

Luogu3736 很容易想到直接DP,关键是枚举顺序。 \(1.\)设后一段构成最后一个点,前一段构成前面的点,那么能得到\(1\)个点的数量要求 : \(1,k,2k-1...\)相差\(k-1\),所以能够剩下的位数是在模\(K-1\)意义下的 \(2.\)因为实质是从里面转移到外面,注意循环的正逆顺序 : \(mid\)比\(j\)小 , 正序枚举\(j\) ; \(mid\)比\(i\...

weixin_30795127的博客 159

Stata实战:用双向固定效应模型分析房价,从数据清洗到结果解读(附完整代码)

本文详细介绍了如何使用Stata实现房价数据的双向固定效应模型分析,从数据清洗到结果解读的全流程。通过具体代码示例,帮助读者掌握面板模型的应用技巧,特别适合经济学和金融学研究者进行房价影响因素分析。

weixin_31528001的博客 277

「HAOI2016」字符合并

「HAOI2016」字符合并 题意: ​ 有一个长度为\(n\)的\(01\)串,你可以每次将相邻的\(k\)个字符合并,得到一个新的字符并获得一定分数。得到的新字符和分数由这\(k\)个字符确定。你需要求出你能获得的最大分数。(\(n\le 300,k\leq8\)) 题解: ​ 关键是要想到区间dp。记\(f[i][j][s]\),表示区间\([i,j]\),合并后状态为\(s\)的...

175

SIwave:在 SIwave 中释放计算频率扫描的强大功能

AEDT 的电路工具允许注入正确的电压和电流。要使用电路工具,SIwave 必须首先使用 PI 求解器求解结构的 S 参数。

jkh920184196的博客 1475

禾赛XT16 vs XT32激光雷达实测对比:选16线还是32线?看完这篇不纠结

本文深度评测禾赛XT16与XT32激光雷达的性能差异与应用选择。通过实测数据对比,分析16线与32线激光雷达在点云密度、动态场景适应性及与IMU协同工作等方面的表现,帮助用户根据自动驾驶、机器人等不同应用场景做出最优选型决策。

table的专栏 944

[Haoi2016]字符合并---区间+状压dp+分析

为了方便将原题题意中的k改成了m(为什么方便??) 毒瘤有趣理由:因为毒瘤,主要在于分析 Description 有一个长度为 n 的 01 串,你可以每次将相邻的 m 个字符合并,得到一个新的字符并获得一定分数。得到的新字符和分数由这 m 个字符确定。你需要求出你能获得的最大分数。 Input 第一行两个整数n,m。接下来一行长度为n的01串,表示初始串。接下来2^k行,每行一个字符ci和一个整...

dsakhdkas的博客 230

人工智能(AI)简史:推动新时代的科技力量

人工智能(AI,Artificial Intelligence)是计算机科学的一个分支,旨在研究和开发可以模拟、扩展或增强人类智能的系统。它涉及多种技术和方法,包括机器学习、深度学习、自然语言处理(NLP)、计算机视觉、专家系统等。

qq_17153885的博客 1万+

洛谷 3736 bzoj 4565 loj 2063 [HAOI2016]字符合并 题解

博客观赏效果更佳 题意简述 长度为n(<=300)的01串,你能合并连续一段长度为k(k<=8)的子串。会合并成什么,得到多少分数,由映射表决定。 比如说,映射表是 1 10 1 10 0 20 1 30 就代表 00->1,得分是10 01->1,得分是10 10->0,得分是20 11->1,得分是30 合理分配合并方案,使得得分最大。 思路框架 区间D...

LightningUZ的博客 407

Python自然语言处理 NLTK 库用法入门教程【经典】

@本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 本文实例讲述了Python自然语言处理 NLTK 库用法。分享给大家供大家参考,具体如下: 在这篇文章中,我们将基于 Python 讨论自然语言处理(NLP)。本教程将会使用 Python NLTK 库。NLTK 是一个当下流行的,用于自然语言处理的 Python 库。 那么 NLP 到底是什么?学习 NLP 能带来什么好处? ...

python函数基础教程 1万+

ESXI 7 :创建统信V20_1050d服务器系统虚拟机

记录一下在 X86 架构创建统信V20_1050d 虚拟机遇到的问题。已遇到的问题有①:常规服务器环境下网络连接失败重点:按照桌面版本,有问题处理简单。

guyuelin123的博客 1967

P3736 [HAOI2016]字符合并

链接: https://www.luogu.org/recordnew/lists?uid=62242 题目描述 有一个长度为nn的0101串,你可以每次将相邻的kk个字符合并,得到一个新的字符并获得一定分数。得到的新字符和分数由这kk个字符确定。你需要求出你能获得的最大分数。 输入输出格式 输入格式: 第一行两个整数n,kn,k。 接下来一行长度为nn的...

weixin_30600503的博客 165

YOLOv11改进策略【Head/分割头】| 结合CVPR-2024 中的DynamicConv 动态卷积 改进分割头, 优化模型(独家改进)

在大规模视觉预训练中,通常模型的性能受到数据、参数和FLOP三个关键因素的影响。一般来说,模型的参数数量越多,FLOP也越高,但在移动设备等对计算资源有限制的场景下,需要低FLOP的模型同时又希望模型能从大规模预训练中受益。传统的方法很难在增加参数的同时保持低FLOP,因此需要一种新的设计来解决这个问题,模块应运而生。

Limiiiing的博客 2310

2018.10.26【HAOI2016】【BZOJ4565】【洛谷P3736】字符合并(区间DP)(状压DP)

BZOJ传送门 洛谷传送门 解析: 由于所有权值都是正数,所以显然最优情况一定是合并到某种不能够继续合并的情况。 一看kkk只有8,可以,这很状压。 那么考虑两种操作,区间合并和区间替换,其中区间合并就是把区间&lt;i,mid−1&gt;&lt;i,mid-1&gt;<i,mid−1>和&am...

anlongyi8087的博客 180

基于Python的网贷平台数据爬虫实战:Scrapy+Selenium+反反爬策略

python复制下载# items.py本文详细介绍了如何使用Python构建一个完整的网贷平台数据爬虫系统,涵盖了从基础爬取到高级反反爬策略的全套解决方案。我们使用了Scrapy框架作为基础,结合Selenium处理动态内容,实现了多种反反爬策略,并探讨了分布式爬虫的实现方式。机器学习识别验证码基于深度学习的网页结构变化检测自动化行为模拟的更精细控制基于Kubernetes的弹性爬虫集群。

2201_76125261的博客 1560

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

20260429紫题训练

给出一个n个点的DAG,删去一个点后可以继续其后继删去入度为0的点问对于每个i,删去i后有几个点会被跟着删去其中n≤216。

cswzxhh的博客 326

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

bzoj 4565: [Haoi2016]字符合并 (字符串dp)

4565: [Haoi2016]字符合并 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 132  Solved: 61 [Submit][Status][Discuss] Description 有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数。得到的新字 符和分数由这 k 个字符

clover_hxy的博客 1680

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

4565: [Haoi2016]字符合并

4565: [Haoi2016]字符合并 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 154  Solved: 70 [Submit][Status][Discuss] Description 有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数。得到的新字 符和分数由这 k 个字符

CRZbulabula的博客 875

区间+状压 [Haoi2016]字符合并

问题 A: [Haoi2016]字符合并 时间限制: 2 Sec 内存限制: 256 MB 提交: 73 解决: 35 [提交][状态][讨论版] 题目描述 有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数。得到的新字 符和分数由这 k 个字符确定。你需要求出你能获得的最大分数。 输入 第一行两个整数n,k。接下来一行长度为n的0

蒟蒻QTY 608
上一篇: CF721C Journey 题解
下一篇: NOIP2021 游记
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值