1 条题解
信息
- ID
- 1328
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 15
- 已通过
- 4
- 上传者
这是一个基本的 dp 题。
问题等价于能否用 a1,±a2,±a3,⋯,±an 凑出 m。
这是一个标准的背包问题, 我们设状态 fi,j 表示前 i 个数能否凑出 j,转移方程是 $f_{i,j}=f_{i-1,j-a_i}\operatorname{or}f_{i-1,j-(-a_i)}$。
注意到这里 j 可能为负数,因此我们把所有的 j 都加上一个比较大的正数再作为下标即可。
bonus:其实问题可以转化为能否用 a1,0,2a2,0,2a3,⋯,0,2an 凑出 m+∑i=2nai,这样就不用处理负数下标了。
注册一个 CZOJ 通用账户,您就可以在我们提供的所有在线评测服务上提交代码、参与讨论。