华为OD机试(C卷+D卷)2024真题目录(Java & c++ & python)
题目描述
A、B两个人玩抢7游戏,游戏规则为:
A先报一个起始数字 X(10 ≤ 起始数字 ≤ 10000),B报下一个数字 Y (X - Y < 3),A再报一个数字 Z(Y - Z < 3),以此类推,直到其中一个抢到7,抢到7即为胜者;
在B赢得比赛的情况下,一共有多少种组合?
输入描述
起始数字 M
- 10 ≤ M ≤ 10000
如:
100
输出描述
B能赢得比赛的组合次数
用例
输入
10
输出
1
解题思路
动态规划。
如果我们要从 A 报数的回合开始模拟,应该初始化 dp[M][0] = 1,表示在 A 轮到报数且起始数字为 M 时,有一种初始状态。然后我们向下递推,最终在 dp[7][1] 处得到结果。
-
状态定义:仍然使用二维数组 dp[i][j],其