本题的题意是,一个数字组成的数组,可以分成两个相同的串,其中一个串的字符用1表示,另一个串用用0表示(ps:只要找到一个满足的就可以了,可能有多个)。
本题的解题思路是:给两个数组每一层找一个相同的数。
一组较好的测试数据:1231412314
#include<stdio.h>
#include<string.h>
int T,N;
int a[2005];
int vis[2005];
bool dfs(int st,int lt,int cur){
if(cur==N/2) return true;
for(int i=st;i<N;i++){
if(vis[i]==-1){
vis[i]=0;
for(int j=i+1;j<N;j++){
if(vis[j]==-1&&a[j]==a[i]&<<j){
vis[j]=1;
if(dfs(i,j,cur+1)){
return true;
}
vis[j]=-1;
}
}
vis[i]=-1;
break;
}
}
return false;
}
int main(){
while(~scanf("%d",&T)){
while(T--){
scanf("%d",&N);
for(int i=0;i<N;i++){
scanf("%d",&a[i]);
}
memset(vis,-1,sizeof(vis));
dfs(0,0,0);
for(int i=0;i<N;i++){
printf("%d",vis[i]);
}
puts("");
}
}
return 0;
}