2023阿里灵犀互娱春招算法题
前言
原文地址:https://xuedongyun.cn/post/50833/
怪物砍法
题目
题目已经找不到了,只能口述。怪物有n滴血,你有k个技能,每个技能能打1, 2, 3, 4, …, k滴落血。假设每个技能都能用无限次,每个回合用一次技能,不限回合数。问恰好能把怪物打死的打法。
输入描述
输入两个正整数n和k,代表怪物的血量和技能的数量
1 <= n <= 1000
1 <= k <= 100
输出描述
一个整数,代表打法的数量对10^9+7取模的值。
样例输入
3 2
样例输出
3
解法
刚开始做这道题,一直在想打法可能会重复,该如何解决重复的问题。后面想到一种二维dp的方法。假设dp(i, j)
表示怪物i滴血,j次打死的打法数量,那么有状态转移方程:
因为最后一次伤害不同,所以一定不会出现重复的情况。打死一只n滴血的怪物需要的回合数最少为:
代码实现
1 | long MOD = 1_000_000_007; |
算法复杂度:
更优解法
之前想复杂了,假设dp[i]
表示i滴血的打法,那么有状态转移方程:
我们只看最后一击即可,因此绝不会重复
代码实现
一定要考虑怪物0滴血的情况。比如怪物4滴血时,可以用伤害为4的技能一刀打死,此时就会出现加
dp[0]
的情况
1 | int n = 1000; |
算法复杂度:
- 标题: 2023阿里灵犀互娱春招算法题
- 作者: 布鸽不鸽
- 创建于 : 2023-04-26 16:35:04
- 更新于 : 2023-06-23 22:01:16
- 链接: https://xuedongyun.cn//post/50833/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论