สมมติว่าเรามีรายการตัวเลขที่ไม่ซ้ำกัน 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คืนnans := 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