2024 STEMA T6:解密T1188超难密码锁,Python区间DP解法揭秘!
以下是使用 Python 实现的代码: ```python # 读取输入 n = int(input()) S = input() # 创建一个三维的动态规划数组 dp # dp[i][j][k] 表示将区间 [i, j] 的圆环拨到数字 k 所需的最少操作次数 dp = [[[float('inf')] * 10 for _ in range(n)] for _ in range(n)] # 初始化 dp 数组 for i in range(n): for k in range(10): # 单个圆环拨到数字 k 的操作次数 dp[i][i][k] = abs(int(S[i]) - k) # 区间长度从 2 到 n 进行遍历 for length in range(2, n + 1): for i in range(n - length + 1): j = i + length - 1 for k in range(10): # 先考虑将整个区间 [i, j] 拨到数字 k 的情况 dp[i][j][k] = min(dp[i][j - 1][k], dp[i + 1][j][k]) + abs(int(S[j]) - k) # 枚举分割点,将区间 [i, j] 分成 [i, m] 和 [m + 1, j] for m in range(i, j): dp[i][j][k] = min(dp[i][j][k], dp[i][m][k] + dp[m + 1][j][k]) # 找到将整个区间 [0, n - 1] 拨到任意数字所需的最少操作次数 ans = float('inf') for k in range(10): ans = min(ans, dp[0][n - 1][k]) # 输出结果 print(ans) ``` 代码解释: 1. 输入读取:首先读取圆环的数量 `n` 和密码字符串 `S`。 2. 动态规划数组初始化:创建一个三维数组 `dp`,其中 `dp[i][j][k]` 表示将区间 `[i, j]` 的圆环拨到数字 `k` 所需的最少操作次数。对于单个圆环,将其拨到数字 `k` 的操作次数为该圆环的目标数字与 `k` 的差值的绝对值。 3. 区间动态规划:通过枚举区间长度、区间起始位置和目标数字,计算将区间 `[i, j]` 拨到数字 `k` 的最少操作次数。枚举分割点,将区间 `[i, j]` 分成两个子区间,取最小操作次数。 4. 结果计算:在所有可能的目标数字中,找到将整个区间 `[0, n - 1]` 拨到该数字所需的最少操作次数。 5. 输出结果:输出最少操作次数。 复杂度分析: - 时间复杂度:$O(n^3 \times 10)$,其中 $n$ 是圆环的数量。 - 空间复杂度:$O(n^2 \times 10)$,主要用于存储动态规划数组。 ######[AI问答 | 718点数解答 | 2025-11-08 22:09:01]
- 动态规划求解数组下标元素和最大值代码分析与优化(字节豆包 | 346点数解答 | 2026-03-16 17:56:30)15
- "Dynamic Programming: Solving the Knapsack Problem with Value and Solution Count, Incomplete Code Revealed"(GPT | 760点数解答 | 2024-06-09 18:21:03)296
- Python实现:背包问题求解及回溯找最优组合代码解析(GPT | 191点数解答 | 2024-06-09 19:21:11)277
- Jass代码BWB函数全解析:功能、详解与潜在问题大揭秘 (字节豆包 | 846点数解答 | 2025-10-27 19:10:27)80
- 2024 STEMA T6:解密T1188超难密码锁,Python区间DP解法揭秘!(字节豆包 | 718点数解答 | 2025-11-08 22:09:01)93
- Python实现45位学生四次成绩随机录入及输出(GPT | 441点数解答 | 2024-12-21 21:02:22)249
- Python实现:随机录入45位学生四次成绩函数大揭秘(GPT | 477点数解答 | 2024-12-17 17:00:35)351
- Python实现班级45位同学成绩生成、总评计算及分数统计(字节豆包 | 579点数解答 | 2024-12-21 11:55:01)241
- Python实战:45位同学成绩生成、总评计算与分数统计揭秘(字节豆包 | 688点数解答 | 2024-12-22 10:14:17)241
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)458
- Python实现AES加密解密:含代码示例与关键注意点(字节豆包 | 836点数解答 | 2025-10-14 16:35:32)66
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)414