Codeforces 1716D Chip Move 题解
此文章已同步在洛谷上更新
题目大意
洛谷题面
如果想看英文题面请去 CF
给定两个数 n , k n,k n,k,问从 0 0 0 开始,第 i i i 步只能走 ( k + i − 1 ) (k+i-1) (k+i−1) 的正倍数(即不能走 0 0 0),问分别走到 x ∈ [ 1 , n ] x\in[1,n] x∈[1,n] 的方案数,对 998244353 998244353 998244353 取模。
思路
第一步:将原问题转化成背包
看到第 i i i 步只能走 ( k + i − 1 ) (k + i - 1) (k+i−1) 的整倍数,不难发现和完全背包很类似。
可以把第 i i i 步看做只能走 ( k + i − 1 ) (k + i - 1) (k+i−1),但是能走无限次。
这样就能把这个问题转化成一个完全背包问题:有 n n n 个物品,第 i i i 个物品重量为 ( k + i − 1 ) (k + i - 1) (k+i−1),每个物品最少取一个(因为题目中说不能走 0)问你总重量为 x ∈ [ 1 , n ] x\in[1,n] x∈[1,n] 的取法数。
第二步:设计状态
但这个问题不是裸的完全背包板子,因为原问题是求最大收益,现在的问题是求方案数。
所以现在需要用完全背包的状态修改一下。
完全背包的状态:设 d p i , j dp_{i,j} dpi,j 为到第 i i i 个物品,总重量为 j j j 时的最大收益。
现在只要修改一点,把最大收益改成方案数就行。
现在的状态:设 d p i , j dp_{i,j} dpi,j 为到第 i i i 个物品,总重量为 j j j 时的方案数。
第三步:转移方程
原来的完全背包转移方程是 d p i , j = max ( d p i − 1 , j , d p i , j − w i + v i ) dp_{i,j} = \max(dp_{i-1,j}, dp_{i,j-w_i} + v_i) dpi,j


553

被折叠的 条评论
为什么被折叠?



