题目:
分析:还是想了一会才想到dp的。
排序后,如果对已经成组的进行相加,我们只用整除最后一个字符即可。
倒着找状态的时候,还是要注意一下子的。
class Solution {
public:
vector<int> largestDivisibleSubset(vector<int>& nums) {
if(nums.size()==0) return nums;
vector<int> v(nums.size(),0);
int maxx=1;
v[0]=1;
sort(nums.begin(),nums.end());
for(int i=1;i<nums.size();i++)
{
v[i]=1;
for(int j=0;j<i;j++)
{
if(nums[i]%nums[j]==0)
{
v[i]=max(v[i],v[j]+1);
}
if(nums[i]/2<nums[j]) break;
}
maxx=max(maxx,v[i]);
}
vector<int> ans;
if(maxx==1)
{
ans.push_back(nums[0]); return ans;
}
int c;
for(int i=0;i<nums.size();i++)
{
if(maxx==v[i]) {
c=i; break;
}
}
ans.push_back(nums[c]);
maxx--;
for(int i=c-1;maxx!=0&&i>-1;i--)
{
if(maxx==v[i]&&nums[c]%nums[i]==0)
{
maxx--;
c=i;
ans.push_back(nums[i]);
}
}
return ans;
}
};