建议加强数据
查看原帖
建议加强数据
1126347
lzx123123楼主2024/8/10 19:36

我是O(T2nn2)O(T2^n n^2) 可是没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;
}
2024/8/10 19:36
加载中...