动态规划June-13th “Largest Divisible Subset (Python3)”

Posted 迪乐阅读

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划June-13th “Largest Divisible Subset (Python3)”相关的知识,希望对你有一定的参考价值。


六月,坚持就是胜利.

Day 13  ——  Largest Divisible Subset

最大整除子集


问题描述

Given a set of distinct positive integers, find the largest subset such that every pair (Si, Sj) of elements in this subset satisfies:
Si % Sj = 0 or Sj % Si = 0.
If there are multiple solutions, return any subset is fine.
Example 1:
   
     
     
   
Input: [1,2,3]
Output: [1,2] (of course, [1,3] will also be ok)
Example 2:
   
     
     
   
Input: [1,2,4,8]
Output: [1,2,4,8]


解题思路

【动态规划】
先进行排序,然后考虑:
  • 一:可除以整除子集中的最大元素的任何值,加入到子集中,可以形成另一个整除子集,即对于所有 h,若有 h % G == 0,则 [E, F, G, h] 形成新的可除子集。

  • 二:可除以整除子集中最小元素的任何值,加入到子集中,可以形成另一个整除子集,即,对于所有的 d,若有 E % d == 0,则 [d, E, F, G] 形成一个新的整除子集。

    
      
      
    
class Solution: def largestDivisibleSubset(self, nums: List[int]) -> List[int]: nums.sort() dp_table = [[x] for x in nums] res = [] for i in range(len(nums)): for j in range(i): if nums[i] % nums[j] == 0 and len(dp_table[j]) + 1 > len(dp_table[i]): dp_table[i] = dp_table[j] + nums[i:i + 1] if len(dp_table[i]) > len(res): res = dp_table[i] return res


以上是关于动态规划June-13th “Largest Divisible Subset (Python3)”的主要内容,如果未能解决你的问题,请参考以下文章

动态规划May-25th “Uncrossed Lines (Python3)”

请帮忙换算PDT和UTC时间

[动态规划]Tak and Cards

hdu2602Bone Collector ——动态规划(0/1背包问题)

挑战程序设计竞赛(算法和数据结构)——17.2 01背包问题(动态规划)的JAVA实现

体育馆团体预约系统软件需求规格说明文档