数学做题笔记
ABC267G Increasing K Times#
[ABC267G] Increasing K Times
一道计数题.
主要是是一个比较经典的trick才来做的这题.
就是形如已知一个序列,求有多少个排列满足一个条件,这个条件一般是制约相邻两个元素的
那么可以采用一个技巧就是序列排序,然后按照某种顺序插入
考虑有多少排列问题,那么可以先对 排序然后依次插入。
每次插入一个最大值,那么只需要求有多少个位置满足插入后满足条件的位置 ,然后直接跑一遍简单的背包即可。
ARC148E ≥ K#
一道计数题。
对于这种对相邻两个元素都有影响的问题,可以考虑将元素按一定顺序一个个加入序列,考虑其对整个方案数的贡献。
1.先将元素从小到大排序。
2.考虑两个维护左右区间的指针 ,令 为 的最小编号,其中 以及 这两段中的元素都已经加入序列。
这样就可以知道一共加入了 个元素,有 个空位可供下一个元素放置。
-
放入
此时一共有 个元素无法满足将 放入其左边或者右边时无法满足 的要求(之所以是 是因为既然 并没有在 之前的元素遍历到时就放入,那么自然前面的元素也是不满足条件的);
那么此时就有 个空位可选。
-
放入
中的元素和 也不能满足条件;
不会有 ,因为如果这样的话 就会在遍历到 还是 是就被当作 放入;
同理,有 个空位可选。
-
注意,因为有相同元素,因此要在最后除以相同元素的排列数以消除影响。
LG T316869 Before I Rise#
一道计数题.
简化题意之后就是将一个只有环和链,边的种类为0,1交替的图,求满足交换节点之后图仍不变的排列数
先考虑某个环或链自身的交换方案数
1.环
在每个环内部交换的方案数为环的
2.链
节点数为奇数的链自身有1种
偶数有2种
接下来考虑同种形态之间的排列,就是求排列数即可
但是需要注意分类,对于节点数为偶数的链还需要分为两种形态,例如
这两种是不能交换的
定义 为节点数为 的环, 为长度为 的第一条边为 的链
所以有最后的公式
LG3349 [ZJOI2016]小星星#
LG3349 小星星
将问题抽象化:
一个 个节点的树,和一个 个节点的图,要求给树上的每个节点编号,使得编号是一个 到 的排列,并且要满足树上任意一条边 ,图中一定要有边 ( 表示点 的编号),求方案数。
暴力的做法是定义状态 表示节点 编号为 , 的子树内的编号集合为 的方案数。
但是这样的瓶颈在于枚举子集,复杂度是 的,显然TLE
Q:为什么要记录 这一维?
A:要求中有「编号是一个 到 的排列」。
尝试把「编号是一个 到 的排列」这一条件去掉,就不用记录 了。
这样只需要定义 为在 的子树内,点 的编号为 的方案数。
而这时候会出现重复编号,怎么办呢?
容斥!
先 枚举 的一个子集 ,强制规定树上每个点的编号必须是 的子集,然后每次 一次DP,总方案数为:
复杂度降到 ,在UOJ上需要进行一定的常数优化。
本篇题解转载自
LG7322 排列变换#
题目类似于滑动窗口。
所有排列初始都会有 1 个最大值,考虑什么时候会更新答案
1.滑动窗口推掉最大值
2.滑动窗口加入最大值
3.考虑有可能又推掉最大又加入最大,因此需要去重
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】