• leetcode 368


    思路:

       首先想到是排序,因为题目说si%sj ==0 或者 sj%si==0,为了方便,可以升序排序,之后就可以只判断 si%sj(i>=j)就可以了

       dp[i] 表示0~i满足题目要求(也就是,每对数都可以整除)的最大集合。

       dp状态方程式:

             初始化dp[0...len] = 1;

             if(nums[i]%nums[j]==0)    dp[i] = max(dp[j]+1)   (0<j<i)

    代码如下:(代码中添加了逆序,但实际上是不需要的,因为题目要求是求一个最大集合

    //
    //  main.cpp
    //  leetcode 368
    //
    //  Created by jzc on 2018/5/22.
    //  Copyright © 2018年 jzc. All rights reserved.
    //
    
    #include <iostream>
    #include <stdio.h>
    #include <vector>
    #include <algorithm>
    using namespace std;
    vector<int> largestDivisibleSubset(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        vector<int> result;
        vector<int> dp(nums.size(),1);//表示前j个最大集合
        vector<int> temp;
        for(int i=0;i<nums.size();i++)
        {
            int max =1;
            int k =i;
            for(int j=0;j<i;j++)
            {
                if(nums[i]%nums[j]==0)
                {
                    if(dp[j]+1>max)
                    {
                        max = dp[j]+1;
                        k = j;
                    }
                }
            }
            dp[i] =max;
            temp.push_back(k);
        }
        int max_len = 0;
        int max_pos = 0;
        for(int i=0;i<nums.size();i++)
        {
            if(dp[i]>max_len)
            {
                max_len = dp[i];
                max_pos = i;
            }
        }
        int pos=max_pos;
        while(pos>=0)
        {
            result.push_back(nums[pos]);
            int pre = pos;
            pos = temp[pos];
            if(pre==pos)
                break;
        }
        reverse(result.begin(),result.end());
        for(int i=0;i<result.size();i++)
            cout<<result[i]<<endl;
        return result;
    }
    int main() {
        int a[6] = {2,3,2,4,4,8};
        vector<int> nums(a,a+6);
        largestDivisibleSubset(nums);
        return 0;
    }
  • 相关阅读:
    缓存ehcache启动失败missing element type
    使用Shell发布Spring Boot程序
    从游牧民族价值观看程序员问题
    浏览器端的缓存localStorage应用
    基于进程的Quartz.NET管理系统QuartzService(一)
    ASP.NET WebAPI 15 CORS
    ASP.NET WebAPI 14 仿写Filter管道
    ASP.NET WebAPI 13 Filter
    ASP.NET WebAPI 12 Action的执行
    ASP.NET WebAPI 11 参数验证
  • 原文地址:https://www.cnblogs.com/jzcbest1016/p/9073926.html
Copyright © 2020-2023  润新知