題意:問每次都從頂部元素向下消去距離小於6的相同元素能否消完全部元素。
代碼:
#include<stdio.h>
#include<map>
#include<algorithm>
using namespace std;
const int MAXN=1010;
int a[MAXN];
bool used[MAXN];
int dfs(int n)
{
while(n>0&&used[n]) n--;
if(n==0) return 1;
int j=n-1;
for(int i=0;i<5;)
{
if(j<=0) return 0;//沒有找到相等的
if(used[j])
{
j--;
continue;
}
if(a[n]==a[j])
{
used[j]=true;
if(dfs(n-1)) return 1;
used[j]=false;
}
i++;
j--;
}
return 0;
}
int main()
{
int n;
map<int,int> mp;
while(scanf("%d",&n)!=EOF)
{
mp.clear();
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
used[i]=false;
mp[a[i]]++;
}
if(n&1)
{
printf("0\n");
continue;
}
int t=1;
map<int,int>::iterator it;
for(it=mp.begin();it!=mp.end();it++)
{
if((it->second)%2==1)
{
t=0;
break;
}
}
if(t==0)
{
printf("0\n");
continue;
}
printf("%d\n",dfs(n));
}
return 0;
}