hdu4727搜索+stl。轻微剪枝

真心险啊。。最后3分钟a出来了。。回家再重新提交的时候发现出现re的错误。。换成g++错误消除。。so。。用stl的情况下最好是用g++。。否则你死都不知道是怎么死的。。还好人品。。最后提交的时候是g++。。不然啃爹的罚时类。。还有就是stl中间的vector容器的使用。。这里的题目跟网络赛的还有点不同。。数据大了1。。- -||

#include<iostream>
#include<vector>
using namespace std;

const int maxn=1020;
vector<int>num;
//int num[maxn];//
int t;
int no[maxn];//
int times[maxn];//
int done=0;//
int locate(int number)
{
    int i=0;
    for(i=0;i<=t-1;i++)
    {
        if(no[i]==-1)
        {
            no[i]=number;
            return i;
        }
        if(no[i]==number)
        {
            return i;
        }
    }
}
bool dfs()
{
    //cout<<done<<endl;
    int t_d;
    t_d=t-done;
    int i;
    if(done==t)
    {
        return 1;
    }
    int tmp=t_d-5;
    for(i=t_d-2;i>=t_d-8;i--)
    {
        if(i<0)
        {
            break;
        }
        if(num[i]==num[t_d-1])
        {
            int save=num[i];
            num.erase(num.begin()+(t_d-1));
            num.erase(num.begin()+i);
            
            t_d-=2;
            done=done+2;
            if(dfs())
            {
                return 1;
            }else
            {
                num.insert(num.begin()+(t_d-1),save);
                num.insert(num.begin()+i,save);
                
                done=done-2;
            }
        }
    }
    return 0;
}
int main()
{

/*
    int t;
    while(cin>>t)
    {
        vector<int>v;//
        v.clear();
        int i=0;
        int tt=t;
        for(i=0;i<=t-1;i++)
        {
            int num;//
            cin>>num;
            v.push_back(num);
        }
        bool tag;
        do
        {
            while(v[t-1]==-1&&t-1>=0)
            {
                t--;
            }
            int tmp=t-5;
            for(i=t-2;i>=tmp;i--)
            {
                if(i<0)
                {
                    tag=0;
                    break;
                }
                if(v[i]==-1)
                {
                    tmp--;
                    continue;
                }
                if(v[t-1]==v[i])
                {
                    v[t-1]=-1;
                    v[i]=-1;
                    tag=1;
                    break;
                }
                tag=0;
            }
        }while(tag);
        bool no=0;
        for(i=0;i<=tt-1;i++)
        {
            if(v[i]!=-1)
            {
                no=1;
                break;
            }
        }
        if(no)
        {
            cout<<0<<endl;
        }else
        {
            cout<<1<<endl;
        }
    }
    */
    while(cin>>t)
    {
        memset(no,-1,sizeof(no));
        memset(times,0,sizeof(times));
        num.clear();
        done=0;
        int i=0;
        int tt=t;
        
        for(i=0;i<=t-1;i++)
        {
            int nnn;
            cin>>nnn;
            num.push_back(nnn);
            times[locate(num[i])]++;
        }/*
        bool isno=0;
        for(i=0;i<=t-1;i++)
        {
            //cout<<times[i]<<endl;
            if(times[i]%2)
            {
                isno=1;
                //break;
            }
        }
        if(isno)
        {
            cout<<0<<endl;
        }else*/
        {
            if(dfs())
            {
                cout<<1<<endl;
            }else
            {
                cout<<0<<endl;
            }
        }
    }
    return  0;
}

  

posted @ 2012-09-08 22:39  77695  阅读(400)  评论(0编辑  收藏  举报