Gravatar
HXF
积分:7228
提交:1327 / 2787

题目4433  圆      评论
2026-06-29 15:22:57    
Gravatar
HXF
积分:7228
提交:1327 / 2787

题目4432  光线追踪      评论
2026-06-29 15:21:06    
Gravatar
hsl_beat
积分:320
提交:52 / 90

我其实把ntt忘干净了,只是用它卷积了而已。


可以理解为补充:http://218.28.19.228:8081/cogs/solution/solpl.php?pl=pmxmNJgjk


3126. 自然数拆分Lunatic版


首先考虑n是2000的正整数拆分,正常可以用完全背包的办法搞定,这里我们考虑另一种办法。我们维护当前的递减序列的时候,每次操作都可以是把这堆数垫一层或者对着结尾放一个 $1$,就是这样:



这里每个竖着的格子高度代表了我们维护递减序列的值,绿色1就代表整体加一,后面一个小格子2就是往末尾加上了一个1。


所以说我们可以记录 $dp_{i,j}$ 表示选了 $i$ 个数,然后和是 $j$,所以说我们转移式子就是 $dp_{i,j}=dp_{i,j-i}+dp_{i-1,j-1}$,分别对应两种情况。


时间复杂度 $O(n^2)$,于是我们解决了3126. 自然数拆分Lunatic版。注意要减一因为看样例可以发现不能保留只有一个数的情况。


HS的自然数拆分2


就是上面的问题把 $n$ 改成 $100000$,然后不能重复。


根据不能重复,我们发现选连续一堆数加起来,从最小的 $1$ 开始加不能到 $\sqrt n$ 个(根据等差数列求和公式)。


所以HS就告诉我们可以用根号分治了,就是先考虑不超过 $\sqrt n$ 的数让他们和为 $n$ 的方案数,可以做到 $O(n\sqrt n)$,然后剩下大于 $\sqrt n$ 的显然选的个数也是有限制的,用我们上面的办法也可以 $O(n\sqrt n)$。


话说不能重复怎么办呢?我们上面的1操作是不会让原本合法的变成不合法的,只有可能是连续加了两个 $1$ 进去才会,所以说我们每次执行2操作之前先执行1一次就可以了。


细节上我们做问题后半部分的时候,2操作每次就不是加一了,而是我们规定的分治界限 $b$。


合并答案就按照定义来就可以,我的写法是把后半部分 dp 的数组对于 $n-i$ 的和枚举个数加起来,然后用这玩意乘上前一个和为 $i$ 的。


于是解决了HS的自然数拆分2,写的时候注意一下模数太大longlong会爆炸。



HS的自然数拆分

首先考虑只有一个数的情况。


相比于上一个问题,其实就是可以重复了。前半部分不说了,后半部分其实就是我们1和2操作分开做就可以了。



下面是HS晚上没讲的东西(相当于我刚刚一直在复述)


现在问题在怎么处理出每个的答案,发现对于$k$这个数的答案就是$\sum_{i=0}^k dp1_{i} \times sumdp2_{k-i}$,这里 $dp1$ 是我们前一半处理的,$sumdp2$ 是对于一个固定和的所有选数个数情况的和,这就是一个卷积的形式,直接跑ntt即可,$998244353$的原根是$3$。


怎么还要写简单的多重背包,我不是明天期末考吗。


题目3161  HS的自然数拆分 AAAAAAAAAA      评论
2026-06-28 17:57:30    
Gravatar
RpUtl
积分:2225
提交:258 / 482

HS:这题考察基本功(诶自然数拆分怎么做我看看)。

一个基础的观察:对于物品 $i$,当 $i\ge\sqrt{n}$ 时物品不可能取完,所以这部分是一个完全背包。

问题分成了两部分,设 $B=\lceil\sqrt{n}\rceil$,令 $F_i$ 表示只用 $1\sim B$ 这些物品体积为 $i$ 的方案数,$G_i$ 表示只用 $B+1\sim n$ 这些物品体积为 $i$ 的方案数,最后对 $F,G$ 卷一下即可。

对于 $F_i$:就是一个裸的完全背包,单调队列可以 $O(n\sqrt{n})$,但因为计数背包是可以退的,所以直接记录前缀和就可以 $O(n\sqrt{n})$。

对于 $G_i$:选择的物品不超过 $\sqrt{n}$ 个,考虑设 $g_{i,j}$ 表示这部分选择 $i$ 个物品体积和为 $j$ 的方案数,为了避免记重强制选择的物品体积单调递减。

问题变成了对一个单调递减,和为 $j$,最小数超过 $\sqrt{n}$ 的序列计数。如何刻画单调递减,经典做法是维护一个空数列,每次全局加一,或者在末尾加入一个最小元素,因此可以得出转移式 $g_{i,j}=g_{i,j-i}+g_{i-1,j-B-1}$。状态数是 $O(n\sqrt{n})$,转移是 $O(1)$ 的。

综上,在 $O(n\sqrt{n})$ 的时间复杂度内解决了本题。


题目2297  [HZOI 2015] 简单的多重背包 AAAAAAAAAA      2      评论
2026-06-26 20:15:35    
Gravatar
RpUtl
积分:2225
提交:258 / 482

比较经典的计数题。

考虑 $\sum a_i^2$ 的组合意义,等价于枚举两个取球方案,且两个方案最终取得的序列相同的方案数。

设 $f_{i,j,k}$ 表示取了 $i$ 个球,枚举的两个方案中,第一个方案在上侧取了 $j$ 个球,在下册取了 $k$ 个球。且目前两种取球的方案得到的序列一样的方案数。

枚举第 $i+1$ 个球取上面还是下面,转移即可,滚动数组优化空间,即可做到 $O(n^3+n^2m))$ 的时间复杂度和 $O(n^2)$ 的空间复杂度。


题目411  [NOI 2009]管道取珠 AAAAAAAAA      1      评论
2026-06-26 19:08:57    
Gravatar
HXF
积分:7228
提交:1327 / 2787

题目4074  二分的代价 AAAAAAAAAA      评论
2026-06-12 20:06:57