【2023GGXS】货币 做题记录

mm 种货币,第 ii 种面值为 2i12^{i-1},求凑出 nn 元钱有多少种方案数,对 998244353998244353 取模。

Ex:求 nn 有多少种 mmkk 进制表示(每一位的数字无上限)。

1m301\le m\le 300n10180\le n\le 10^{18}2k162\le k\le 16

考虑把面值为 2i2^i 的货币拆成面值 2i2^{i}2i+12^{i+1}2i+22^{i+2}……的货币各一个,即把 2i2^i 的选择个数 aia_i“摊平”。这样就可以转化为 01 背包。

那么数位 dp,设 dpi,jdp_{i,j} 表示考虑完 202i2^0\sim 2^i,向后进了 jj 的方案数。

转移考虑枚举有 kk 种面值当前位都为 11,枚举上一位的进位 ll,则:

dpi,k+l2=[k+ln2i (mod 2)](min(m,i+1)k)dpi1,ldp_{i,\lfloor\frac{k+l}{2}\rfloor}=[k+l\equiv n_{2^i}\text{ (mod }2\text{)}]\binom{\min(m,i+1)}{k}dp_{i-1,l}

Ex 做法类似,不过拆出来的每种货币可以选 k1k-1 个。