大佬求调!!!orz!!!
#include<bits/stdc++.h>
using namespace std;
const double eps=1e-8;
int T;
int n,m;
struct S{
double x,y;
}s[1000001];
S fuck(S a,S b){
S sb;
if(fabs(a.x-a.y)<-eps){
sb.x=114514.0;
sb.y=114514.0;
return sb;
}
sb.x=(a.y*b.x-b.y*a.x)/(a.x*a.x*b.x-b.x*b.x*a.x);
sb.y=(a.y-a.x*a.x*sb.y)/a.x;
return sb;
}
int dp[10001];
int CCF[101][101];
int main(){
cin>>T;
while(T--){
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>s[i].x>>s[i].y;
}
fill(dp,dp+10001,1e9);
dp[0]=0;
memset(CCF,0,sizeof(CCF));
for(int i=0;i<n;i++){
CCF[i][i]=(1<<i);
for(int j=i+1;j<n;j++){
if(fabs(s[i].x-s[j].x)<eps) continue;
S ccf=fuck(s[i],s[j]);
int tmd=(1<<j)|(1<<i);
if(ccf.x>=0) continue;
int idx=0;
for(int k=0;k<n;k++){
if(fabs(ccf.x*s[k].x*s[k].x+ccf.y*s[k].x-s[k].y)<-1e6) tmd+=(1<<k);
}
CCF[i][j]=tmd;
}
}
for(int i=0;i<(1<<n)-1;i++){
int idx=0;
for(;idx<n;idx++) if(!(i>>idx&1)) break;
//cout<<idx<<": ";
for(int j=0;j<n;j++) dp[i|CCF[idx][j]]=min(dp[i|CCF[idx][j]],dp[i]+1);
//cout<<endl;
}
//cout<<endl;
//cout<<n<<":";
//for(int i=1;i<=n;i++) cout<<(1<<i)-1<<" : "<<dp[(1<<i)-1]<<" | ";
//cout<<endl;
///cout<<"--------------------------------------------------------"<<endl;
cout<<dp[(1<<n)-1]<<endl;
}
return 0;
}
本蒟蒻太菜了!!!简单状压DP都不废了!!!qwq
求求了!!!