DP(动态规划求最大整除子集)-06-动态规划-最大整除子集

最大整除子集

给出一个由无重复的正整数组成的集合,找出其中最大的整除子集,子集中任意一对 (Si,Sj) 都要满足:Si % Sj = 0 或 Sj % Si = 0。

如果有多个目标子集,返回其中任何一个均可。

示例 1:

输入: [1,2,3]
输出: [1,2] (当然, [1,3] 也正确)


示例 2:

输入: [1,2,4,8]
输出: [1,2,4,8]

 1 class Solution {
 2 public:
 3     vector<int> largestDivisibleSubset(vector<int>& nums) {
 4         if(nums.size() == 0||nums.size() == 1)
 5             return nums;
 6         sort(nums.begin(),nums.end());
 7         int n = nums.size();
 8         vector<int> ma;
 9         vector<pair<int,int>>num;
10         for(int i = 0;i < n;i++){
11             num.push_back(make_pair(1,-1));
12         }
13         int maxnum = -1;
14         int maxi;
15         for(int i = 0;i < n;i++){
16             for(int j = 0;j < i;j++){
17                 if(nums[i] % nums[j] == 0){
18                     if(num[i].first <= num[j].first){
19                         num[i].first = num[j].first;
20                         num[i].first++;
21                         num[i].second = j;
22                     }
23                 }
24             }
25             if(maxnum < num[i].first){
26                 maxnum = num[i].first;
27                 maxi = i;
28             }
29         }
30         while(maxi != -1){
31             ma.push_back(nums[maxi]);
32             maxi = num[maxi].second;
33         }
34         return ma;
35     }
36 };

 

posted @ 2020-02-03 21:13  我只是一个码农  阅读(269)  评论(0编辑  收藏  举报