CF1716D 题解

Codeforces 1716D Chip Move 题解

此文章已同步在洛谷上更新

题目大意

洛谷题面
如果想看英文题面请去 CF
给定两个数 n , k n,k n,k,问从 0 0 0 开始,第 i i i 步只能走 ( k + i − 1 ) (k+i-1) (k+i1) 的正倍数(即不能走 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+i1) 的整倍数,不难发现和完全背包很类似。
可以把第 i i i 步看做只能走 ( k + i − 1 ) (k + i - 1) (k+i1),但是能走无限次。
这样就能把这个问题转化成一个完全背包问题:有 n n n 个物品,第 i i i 个物品重量为 ( k + i − 1 ) (k + i - 1) (k+i1),每个物品最少取一个(因为题目中说不能走 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值