Skip to content

【正整数拆分】AT_abc221_h [ABC221H] Count Multiset 笔记 ​

一种对正整数拆分进行 DP 的转移方法:

考虑两种操作,放 0 和全部 +1,容易发现每一种拆分都可以通过这两种操作还原。

因此设 fi,j 表示拆分成 i 个数,和为 j 的拆分方案数,边界条件有 fi,0←[i≤m]。

接着转移:

  • 放 0:fi,j←fi−1,j
  • +1:fi,j←fi,j−i

问题是不能连续执行超过 m 次放 0 操作。考虑一次执行所有连续的放 0 操作,用辅助数组 gi,j 表示 fi,j 最后一次执行的操作是 +1,这样子放 0 时,fi,j←∑k=i−mi−1gk,j,前缀和优化,状态数 O(n2),转移 O(1),时空复杂度 O(n2)。

最近更新