XYD1004CSPS(找个好日子把T4的史赤了)

news/2024/10/9 12:24:24

T1 序列 [贪心,模拟]

Description

给定一个序列,每次可以将一个数减一,求让所有数字互不相同的最小操作数,\(0\) 除外,也就是 \(0\) 可以相同。

Solution

贪心地,从大到小考虑每个数,都只需要减到第一个没有数出现的数。
开个桶从大到小累计答案即可。

T2 XYD [构造]

Description

给定 \(n\),构造一个长度不超过 \(6000\) 且仅含 X Y D 三个字母的字符串,使得子序列 XYD 恰好出现 \(n\) 次。

Solution

对于每个 X,假设后面有 \(k\) 个 YD,那么它们产生的贡献是 \(\sum_{i=1}^k i\)
于是我们可以把 \(n\) 拆成许多个数的阶加即可。
可以选择最大到 \(2000\) 的阶加,如果过大那么字符串长度可能超过 \(6000\)

T3 大 [状压DP]

Description

初始序列 x 和 y,有 \(m\) 个操作序列 a,每次操作可以把 x 每一个元素变为 \(\max(x_i,a_i)\) 或对 y 进行同样操作。
最大化 \(\sum \max(x_i,y_i)\)

Solution

考虑每一位,假设它的操作是独立的,那么我们肯定贪心地每一位选最大的是最优的。
但是一个序列只能对 x 和 y 其中一个操作,不能同时操作两个,所以这便涉及到最优分配。
为了方便处理,我们可以把取最大值的操作转换为赋值操作,也就是取一堆最大值,相当于把一个最大的直接赋值给它,考虑哪些位上被赋值,哪些位保留。
综上,要考虑到赋值哪些位,还要考虑到赋值给 x 或 y,于是我们选择 dp 求解。
\(f_x(i,j)\)\((1\le i\le m)\)\((0\le j\le 2^{2n})\) 表示考虑前 \(i\) 个操作序列,现在是第 \(i\) 个,赋值状态为 \(j\),且赋值给 x,所能取到的最大答案。\(f_y(i,j)\) 同理。
显然直接转移状态数是会炸的。
但是,每一位我们只需要考虑前 \((n+1)\) 大的,因为最坏的情况就是,x 想要的都被 y 抢走更优,那么 y 最多能占用 \(n\) 个,\(x\) 选第 \((n+1)\) 个即可。然后又因为一共有 \(n\) 位,所以状态数最多只有 \(O(n(n+1))\)。dp 的复杂度为 \(O(n(n+1)2^{2n})\),非常正确的时间复杂度。
然后空间上,把第一维滚掉即可。
dp 伪代码:

for(int i : 1 ~ m){for(int j : 1 ~ n){if(id[i][j] <= n + 1){ // 每位只考虑前 (n + 1) 个for(int k : 1 ~ 2^2n){if(第 j 位被选了){fx[k] = max(fx[k], fx[k ^ (1 << (j - 1))] + a[i][j]);} }for(int k : 1 ~ 2^2n){if(第 j 位被选了){fy[k] = max(fy[k], fy[k ^ (1 << (j + n - 1))] + a[i][j]);}}}}// 合并答案 滚动数组fx[] = fy[] = max(fx[], fy[]);
}
// 把没赋值的加上原来的值
for(int i : 1 ~ 2^2n){for(int j : 1 ~ n){if(第 j 位没被赋值){fx[i] += x[j];}}for(int j : n+1 ~ 2n){if(第 j 位没被赋值){fx[i] += y[j];}}
}
ans = max{fx[]}; // 用 fy[] 也行,因为已经合并了

Summary

DP 好题,把取 \(\max\) 转化为了赋值,并巧妙利用了题目 \(n\) 的数据范围。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

日本语版本在线客服系统

我们系统的前端访客界面支持多语种展示 默认会根据浏览器语言进行自动切换URL聊天链接中传递参数,例如:lang=ja-JP 则界面就展示为日文 界面上的文案部分,是可以通过语种文件进行转换展示,但是内容部分是不会跟着变的所以,建议每一个语种建立一个商家。例如:英文客服,中…

回溯法

算法导论 这个文档是学习“算法设计与分析”课程时做的笔记,文档中包含的内容包括课堂上的一些比较重要的知识、例题以及课后作业的题解。主要的参考资料是 Introduction to algorithms-3rd(Thomas H.)(对应的中文版《算法导论第三版》),除了这本书,还有的参考资料就是 Al…

随机算法

算法导论 这个文档是学习“算法设计与分析”课程时做的笔记,文档中包含的内容包括课堂上的一些比较重要的知识、例题以及课后作业的题解。主要的参考资料是 Introduction to algorithms-3rd(Thomas H.)(对应的中文版《算法导论第三版》),除了这本书,还有的参考资料就是 Al…

分治法

算法导论 这个文档是学习“算法设计与分析”课程时做的笔记,文档中包含的内容包括课堂上的一些比较重要的知识、例题以及课后作业的题解。主要的参考资料是 Introduction to algorithms-3rd(Thomas H.)(对应的中文版《算法导论第三版》),除了这本书,还有的参考资料就是 Al…

贪心法

算法导论 这个文档是学习“算法设计与分析”课程时做的笔记,文档中包含的内容包括课堂上的一些比较重要的知识、例题以及课后作业的题解。主要的参考资料是 Introduction to algorithms-3rd(Thomas H.)(对应的中文版《算法导论第三版》),除了这本书,还有的参考资料就是 Al…

Nuxt.js 应用中的 page:finish 钩子详解

title: Nuxt.js 应用中的 page:finish 钩子详解 date: 2024/10/9 updated: 2024/10/9 author: cmdragon excerpt: page:finish 是 Nuxt.js 中用于处理页面加载完成事件的钩子,特别是与 Suspense机制相关。这个钩子允许开发者在页面加载完成后执行自定义操作,以优化用户体验…

智驾仿真测试实战之自动泊车HiL仿真测试

1.引言汽车进入智能化时代,自动泊车功能已成为标配。在研发测试阶段,实车测试面临测试场景覆盖度不足、效率低下和成本高昂等挑战。为解决这些问题,本文提出一种自动泊车HiL仿真测试系统方案,可大幅度提升测试效率及测试场景覆盖度、缩短测试周期、加速产品迭代升级。2.自动…

如何自己动手实现一个图片解答小助手

本文介绍了如何自己动手实现一个图片解答小助手。有一张图片如下所示:Kimi上有一个功能,就是解析图片内容,给出回答:这样可以用于拍照向AI提问的场景,我自己也有这方面的需求,因此动手实践了一下。 自己动手实现的效果如下所示:那么自己如何实现呢? 可以通过添加一个OC…