【动态规划】P1130 红牌-题解

本文详细分析了一道动态规划问题——红牌问题。通过算法分析,确定问题需要以O(nm)的时间复杂度求解,排除暴力搜索,推测记忆化搜索可能适用。该问题简化后转化为有M种方式完成N个任务的选择问题,满足无后效性,适合用DP解决。介绍了状态转移方程,并给出了最终答案的求解方式。附带完整代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路:

算法分析:

根据题目中的数据范围可以轻易得知,此题的时间复杂度必须是或优于 O ( n m ) O(nm) O(nm) 所以,搜索就想都别想,根据本人猜测,此题使用暴搜加上剪枝,是差点火候的,也许只有记忆化才能写过。

这道题简化来说就是有 M M M 种方式完成 N N N 个任务,可以初始随意选择一种方式来完成,之后每一步,可以不切换方式,也可以切换成第 i + 1 i+1 i+1 个方式,但第 M M M 中方式,能切换到第 1 1 1 种方式。

对于每步决策,要么不换,要么换,这不就是DP的典型吗,再想想,这个问题每次决策不直接影响后面的决策,满足无后效性;即可考虑DP。

如何设计:

我们可以设 d p i , j dp_{i,j} dpi,j 表示当进行到第 i i i 步时,并且选择第 j j j 种方式的最优解,则在一般情况下,要么是由用原先的方案的状态转移而来,即 d p i − 1 , j dp_{i-1,j} dpi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值