应用题-动态规划-不相交的线( 本质:最长公共子序列 )

管理员
```python class Solution: # 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 # 现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足: # - nums1[i] == nums2[j] # - 且绘制的直线不与任何其他连线(非水平线)相交。 # 请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。 # 以这种方法绘制线条,并返回可以绘制的最大连线数。 def maxUncrossedLines(self, nums1: List[int], nums2: List[int]) -> int: # 应用题:本质 -> nums1和nums2中元素可删除 求最长公共子序列 n1, n2 = len( nums1 ), len( nums2 ) if n1 == 0 or n2 == 0: return 0 dp = [ [ 0 for _ in range( n2 + 1 ) ] for _ in range( n1 + 1 ) ] ans = 0 for i in range( 1, n1 + 1 ): for j in range( 1, n2 + 1 ): if nums1[ i - 1 ] == nums2[ j - 1 ]: dp[ i ][ j ] = dp[ i - 1 ][ j - 1 ] + 1 else: dp[ i ][ j ] = max( dp[ i - 1 ][ j - 1 ], dp[ i ][ j - 1 ], dp[ i - 1 ][ j ] ) if dp[ i ][ j ] > ans: ans = dp[ i ][ j ] return ans ```
评论 0

发表评论 取消回复

Shift+Enter 换行  ·  Enter 发送
还没有评论,来发表第一条吧