我是O(T2nn2) 可是没T 好夸张 代码:
#include<bits/stdc++.h>
#define eps 1e-8
using namespace std;
int n,m,dp[400],f[1000010];
double x[20],y[20];
int c(double ax,double ay,double bx,double by)
{
double fa=1.0*(by*ax-ay*bx)/(bx*bx*ax-ax*ax*bx);
double fb=(ay-fa*ax*ax)/ax;
if(fa>=-eps)
{
return 0;
}
int k=0;
for(int i=1;i<=n;i++)
{
if(abs(x[i]*x[i]*fa+fb*x[i]-y[i])<eps)
{
k=(1<<(i-1));
}
}
return k;
}
void Main(){
cin>>n>>m;
int cnt=0;
for(int i=1;i<=n;i++)
{
cin>>x[i]>>y[i];
}
for(int i=1;i<=n;i++)
{
dp[++cnt]=1<<i-1;
for(int j=i+1;j<=n;j++)
{
dp[++cnt]=c(x[i],y[i],x[j],y[j]);
}
}
memset(f,1,sizeof f);
for(int i=1;i<=cnt;i++)
{
f[dp[i]]=1;
}
f[0]=0;
for(int i=0;i<(1<<n);i++)
{
for(int j=1;j<=cnt;j++)
{
f[i|dp[j]]=min(f[i|dp[j]],f[i]+1);
}
}
cout<<f[(1<<n)-1]<<endl;
}
int main(){
int T;
cin>>T;
while(T--)
{
Main();
}
return 0;
}