专栏文章

题集

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minjzfrv
此快照首次捕获于
2025/12/02 03:39
3 个月前
此快照最后确认于
2025/12/02 03:39
3 个月前
查看原文

U622716

主包也是被坑惨了,这题写了3个多小时. . .
首先第一眼看过去,这不就是一道 找规律 数学题吗。嗯,规律确实找到了,只不过不对而已(☆-v-). . .但凡样例稍微大一点我都不用调那么久。
最开始想到的是:求出 n\le n 的第一个 2k2 ^ k。实际上这个算法没有任何正确性可言. . .
一个反例: n=8n = 8 时的拆分方案,我们想到的就是:
{8}\{8\}
{4, 4}\{4,\ 4\}
{2, 2, 4}\{2,\ 2,\ 4\}
{2, 2, 2, 2}\{2,\ 2,\ 2,\ 2\}
{1, 1, 2, 2, 2}\{1,\ 1,\ 2,\ 2,\ 2\}
{1, 1, 1, 1, 2, 2}\{1,\ 1,\ 1,\ 1,\ 2,\ 2\}
{1, 1, 1, 1, 1, 1, 2}\{1,\ 1,\ 1,\ 1,\ 1,\ 1,\ 2\}
{1, 1, 1, 1, 1, 1, 1, 1}\{1,\ 1,\ 1,\ 1,\ 1,\ 1,\ 1,\ 1\}
实际上还有两种:
{1, 1, 2, 4}\{1,\ 1,\ 2,\ 4\}{1, 1, 1, 1, 4}\{1,\ 1,\ 1,\ 1,\ 4\}
就这么轻轻松松的推翻了我们的猜想。然后问题就来了,知道哪儿错了以后怎么改呢?

完全背包

首先我们来转化一下问题:用无限多个面额 2tt=0..k2^t(t=0..k) 的“硬币”凑出总额 2k2^k,统计不同的非负解(每种面额可用012...0、1、2... 次)。这就是经典的完全背包。
为什么可以转化成这样呢?nn22的幂次时,这样转化当然成立。为什么 nn 不为 22 的幂次时也成立呢?举个例子:
n=4n = 4 → 最小单位:44根长度为11的木棍
n=12n = 12 → 最小单位:44根长度为33的木棍
我们发现这没有什么区别,也就是说n=4n = 4n=12n = 12其实是等价的。

这是纯dp的写法

总长是i的方案个数dpi={包含长度1的木棍:去掉一根长度为1的木棍,对应dpi1不包含长度1的木棍:仅使用长度为248...2t的木棍凑出i    仅使用长度为124...2t1的木棍凑出i2总长是i的方案个数dp_i = \begin{cases} 包含长度1的木棍:去掉一根长度为1的木棍,对应 dp_{i - 1}\\ 不包含长度1的木棍:仅使用长度为2,4,8,. . . 2^ t的木棍凑出 i\\ \ \ \ \ → 仅使用长度为1,2,4, ... 2 ^ {t - 1}的木棍凑出 \frac{i}{2} \end{cases}

CF1811E

这题看上去挺麻烦的,需要算 kk 以内有多少数码不包含 44 的数,实际上有一个小技巧可以处理:进制映射。
不包含 44 的数其实就是由 {0,1,2,3,5,6,7,8,9}\{0, 1, 2, 3, 5, 6, 7, 8, 9\} 组成的数,我们将其看成九进制,映射为 {0,1,2,3,4,5,6,7,8}\{0, 1, 2, 3, 4, 5, 6, 7, 8\},这样每个数转化成十进制后就是不含 44 的数了。
举个例子:(14365)映射=(15376)9=(5+1)×90+(6+1)×91+3×92+(4+1)×93+1×94=(10332)10(14365)_{映射} =(15376)_9= (5 + 1) \times 9^0 + (6 + 1) \times 9^1 + 3 \times 9^2 + (4 + 1) \times 9^3 + 1 \times 9^4 = (10332)_{10}
确实没有包含 44,所以序列中第 kk 个数就是 kk 映射后的结果。

练习题:

样例:
Input
CPP
6
1
2
3
4
5
6
Output
CPP
A
B
C
E
F
AA

评论

0 条评论,欢迎与作者交流。

正在加载评论...