Python题目,求讲解代码,大佬勿喷
  • 板块学术版
  • 楼主jinzhaoming
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/8/13 20:12
  • 上次更新2024/8/13 22:26:36
查看原帖
Python题目,求讲解代码,大佬勿喷
813812
jinzhaoming楼主2024/8/13 20:12

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

看到一道题目如下:

有一个由 n 个圆环组成的密码锁,和一个 n 位的密码 S(S 由 1~9 中的数字组成,包含1和9)。每次操作只能选择一个或多个位置连续的圆环拨动。当 S 中的字符从左到右依次显示在密码显示区时,密码锁会被打开。

已知每个圆环在密码显示区初始数字都为 0,请计算最少需要操作多少次,才能打开密码锁。

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

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.解释核心代码

评论写不下可以私聊

2024/8/13 20:12
加载中...