捞(玄3关)
  • 板块灌水区
  • 楼主SuperMinecraft
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/3/14 23:44
  • 上次更新2024/3/15 14:32:43
查看原帖
捞(玄3关)
1073416
SuperMinecraft楼主2024/3/14 23:44

愤怒的小鸟

60分QWQ

大佬求调!!!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

求求了!!!

2024/3/14 23:44
加载中...