分析:
被坑了。。。
敲击三遍,WA了三遍。。。
发现很多同学,之间二分模版都过了。。。
我觉得还要拍下序。
找到可以整除的最小点覆盖。。。。
2013-04-26
#include"stdio.h"
#include"string.h"
#include"algorithm"
using namespace std;
int n;
int map[1001][1001];
int v[1001],set[1001];
int dfs(int k)
{
int i;
for(i=0;i<n;i++)
{
if(!v[i]&&map[k][i])
{
v[i]=1;
if(dfs(set[i])||set[i]==0)
{
set[i]=k;
return 1;
}
}
}
return 0;
}
int main()
{
__int64 a[1001];
int T;
int i,j,m;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%I64d",&a[i]);
sort(a,a+n);
m=1;
for(i=1;i<n;i++)
{
if(a[i]!=a[i-1])
a[m++]=a[i];
}
n=m;
memset(map,0,sizeof(map));
memset(set,0,sizeof(set));
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
if(a[j]%a[i]==0)map[j][i]=1;
}
int ans=0;
for(i=0;i<n;i++)
{
memset(v,0,sizeof(v));
if(dfs(i))ans++;
}
printf("%d\n",n-ans);
}
return 0;
}