社区讨论

Python题目,求讲解代码,大佬勿喷

学术版参与者 4已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lzsdxcip
此快照首次捕获于
2024/08/13 20:14
2 年前
此快照最后确认于
2024/08/13 22:26
2 年前
查看原帖

先说3遍:悬关!悬关!!悬关!!!

看到一道题目如下:
有一个由 n 个圆环组成的密码锁,和一个 n 位的密码 S(S 由 1~9 中的数字组成,包含1和9)。每次操作只能选择一个或多个位置连续的圆环拨动。当 S 中的字符从左到右依次显示在密码显示区时,密码锁会被打开。
已知每个圆环在密码显示区初始数字都为 0,请计算最少需要操作多少次,才能打开密码锁。

做不出看了题解,答案代码如下

PYTHON
n = int(input())
s = input()
s = ' ' + s
dp = [[0 for i in range(101)] for j in range(101)]

for j in range(1, n + 1):
    for i in range(j, 0, -1):
        if j == i:
            dp[i][j] = 1
            continue
        dp[i][j] = dp[i][j - 1] + 1
        if s[j] == s[j - 1]:
            dp[i][j] = min(dp[i][j - 1], dp[i][j])
        if s[j] == s[i]:
            dp[i][j] = min(dp[i + 1][j - 1] + 1, dp[i][j])
        if s[i] == s[i + 1]:
            dp[i][j] = min(dp[i + 1][j], dp[i][j])
        for k in range(i, j):
            dp[i][j] = min(dp[i][k] + dp[k + 1][j], dp[i][j])

for i in range(1, n + 1):
    for j in range(1, n + 1):
        print(dp[i][j], end=' ')
    print()


print(dp[1][n])

看了之后有点摸不着头脑,求解:

1.dp[i][j]代表什么

2.解释核心代码

评论写不下可以私聊

回复

4 条回复,欢迎继续交流。

正在加载回复...