关于LIS的错误答案

时间:2017-01-17 07:46:10

标签: algorithm lis

我正在解决我的大学法官的问题,我必须对所有lis序列。 n非常小,因此,我生成所有子集,如果它们正在增加并且长度最长,我正在打印它。我的代码有什么问题?或者订单可能有问题吗?

#include<iostream>
#include<cmath>
#include<algorithm>
#include<sstream>
#include<vector>
#include<map>
using namespace std;
int a[100005];
int l[100005];

vector< vector<int> > V;
int main()
    {
    int n,r,c;
    cin>>n;
    for(int i=0;i<n;i++)
       {
        cin>>a[i];
        l[i]=1;
    }
    for(int i=0;i<n;i++)
        {
        for(int j=0;j<i;j++)
            {
            if(a[i]>a[j]&&l[i]<l[j]+1)
                {
                l[i]=l[j]+1;
            }
        }
    }

    vector<int> v;
    r=0;
    int cnt=0;
    for(int i=0;i<pow(2,n);i++)
        {


        for(int j=0;j<n;j++)
            {
            if(i & (1<<j))
                {
                v.push_back(a[j]);
            }

    }
        int f=0;
        if(v.size()==*max_element(l,l+n))
         {
            int ss=v.size();
        for(int x=0;x<ss-1;x++)
           {
            if(v[x]>=v[x+1])
              {
                f=-1;
                break;
            }

        }
            if(f==0)
                {
                V.push_back(v);
            }
        }
        v.clear();
    }
    for(int i=0;i<V.size();i++)
        {
        for(int j=0;j<V[i].size();j++)
            {
            cout<<V[i][j];
            if(j!=V[i].size()-1)
                cout<<" ";
        }
        cout<<endl;
    }
    return 0;
}

0 个答案:

没有答案