Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาขนาดของเซตย่อยที่ใหญ่ที่สุดที่ทุกคู่หารกันลงตัวใน Python

สมมติว่าเรามีรายการตัวเลขที่ไม่ซ้ำกัน nums ต้องการหาเซตย่อย (subset) ที่ใหญ่ที่สุด ที่ทุกคู่ (i, j) ในเซต ต้องมี i % j == 0 หรือ j % i == 0 คืนขนาดของเซตนี้

เช่น nums = [3, 6, 12, 24, 26, 39] ผลลัพธ์ = 4 เซตที่ถูกต้อง: [3, 6, 12, 24]

ขั้นตอนการแก้ปัญหา (DP หลังเรียงลำดับ)

  • dp := array ขนาด n เติม 1 (dp[i] = ขนาดเซตใหญ่สุดลงท้ายที่ i)
  • เรียง nums จากน้อยไปมาก
  • n := len(nums), ถ้า n <= 1 คืน n
  • ans := 0
  • วน i = 1..n-1:
    • วน j = 0..i-1:
      • ถ้า nums[i] % nums[j] == 0: dp[i] = max(dp[i], dp[j] + 1)
    • ans = max(ans, dp[i])
  • คืน ans

ตัวอย่างโค้ด

class Solution:
    def solve(self, nums):
        dp = [1] * len(nums)
        nums.sort()
        n = len(nums)
        if n <= 1:
            return n
        ans = 0
        for i in range(1, n):
            for j in range(0, i):
                if nums[i] % nums[j] == 0:
                    dp[i] = max(dp[i], dp[j] + 1)
            ans = max(ans, dp[i])
        return ans

ob = Solution()
nums = [3, 6, 12, 24, 26, 39]
print(ob.solve(nums))

ข้อมูลนำเข้า

[3, 6, 12, 24, 26, 39]

ผลลัพธ์

4