• 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 };
  • 相关阅读:
    [SUCTF 2019]EasySQL
    [强网杯 2019]随便注
    [HCTF 2018]WarmUp
    Linux下配置JDK环境
    Centos克隆虚拟机后配置网络
    Sublime安装插件
    LeetCode-91-解码方法
    LeetCode-322-零钱兑换
    LeetCode-152-乘积最大子数组
    LeetCode-139-单词拆分
  • 原文地址:https://www.cnblogs.com/qinqin-me/p/12257384.html
Copyright © 2020-2023  润新知