CometOJ_ 예순하나 기쁨 대회 타이틀 B : 보물 센터가 큰 대결을 꿈을 꿀 수!
매우 간단 느낌을보고, 직접 폭력에 대한 생각을 시작 다음 다시 마크, 페어는 상대적으로 소수 발견 된 배열을 통과, 그러나 이것은 최대의 번호를 찾을 수 문제에 대한 공식 솔루션을 읽지 않는 것으로, 아직도 조금 뭔가가 있었다. . . .
본원에 사용 된 시간 복잡도 비교적 높게 열거 사용 재귀
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int used[20];
int a[20];
int t,n;
int ans;
int gcd(int x,int y){
return y==0?x:gcd(y,x%y);
}
void dfs(int id){
if(id==n){
for(int i=0;i<n;i++){
for(int j=0;j<i;j++){
if(used[i]&&used[j]&&gcd(a[i],a[j])!=1){
return ;
}
}
}
int cnt=0;
for(int i=0;i<n;i++){
if(used[i]==1){
cnt++;
}
}
if(cnt>ans){
ans=cnt;
}
return ;
}
used[id]=1;
dfs(id+1);
used[id]=0;
dfs(id+1);
}
int main(){
scanf("%d",&t);
while(t--){
memset(used,0,sizeof(used));
memset(a,0,sizeof(a));
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
ans=0;
dfs(0);
printf("%d\n",ans);
}
return 0;
}