社区讨论
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,请计算最少需要操作多少次,才能打开密码锁。
做不出看了题解,答案代码如下
PYTHONn = 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 条回复,欢迎继续交流。
正在加载回复...