95pts WA 8求助
查看原帖
95pts WA 8求助
275860
___A__楼主2024/3/18 21:54
#include<bits/stdc++.h>
using namespace std;
const int N=18;const double eps=1e-6;
int T,n,typ,line[N][N];
double x[N],y[N];
int dp[1<<N];
int main(){
    cin>>T;
    while(T--){
        cin>>n>>typ;
        for(int i=0;i<n;i++){
            cin>>x[i]>>y[i];
        }
        memset(dp,127,sizeof(dp)),memset(line,0,sizeof(line));
        for(int i=0;i<n;i++){
            for(int j=i+1;j<n;j++){
                if(abs(x[i]-x[j])>eps){
                    double a=(y[i]/x[i]-y[j]/x[j])/(x[i]-x[j]),b=y[i]/x[i]-a*x[i];
                    if(a<0){
                        for(int k=0;k<n;k++){
                            if(abs(a*x[k]*x[k]+b*x[k]-y[k])<eps){
                                line[i][j]+=(1<<k);
                            }
                        }
                    }
                }
            }
        }
        dp[0]=0;
        for(int S=0;S<(1<<n);S++){
            for(int i=0;i<n;i++){
                if((S>>i)&1){
                    dp[S]=min(dp[S],dp[S-(1<<i)]+1);
                }
                for(int j=i+1;j<n;j++){
                    if((S&line[i][j])==line[i][j]){
                        dp[S]=min(dp[S],dp[S-line[i][j]]+1);    
                    }
                }
            }
        }
        cout<<dp[(1<<n)-1]<<'\n';
    }
}
2024/3/18 21:54
加载中...