zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    MVC3 string equlas int 方法
    AjAx ComponentArt. NavBar 的用法
    GridView重写排序、分页 (原作)
    如何用 Calendar 控件来做日程管理
    无刷新仿google波形扭曲彩色Asp.net验证码
    Asp.net 2.0图形报表制作chart(原作)
    WinForm.Net 界面皮肤使用资源(C#原作)
    java Date类用法(转)
    画类图
    LCA tarjan hdu 2586代码详细步骤(转)
  • 原文地址:https://www.cnblogs.com/jzcbest1016/p/9073926.html
Copyright © 2011-2022 走看看