求助!!!为什么dp数组初始化是什么就输出什么???
查看原帖
求助!!!为什么dp数组初始化是什么就输出什么???
170690
诛心楼主2020/8/12 16:36
#include<bits/stdc++.h>
#define eps 0.000001
using namespace std;
int t,n,m,ans,dp[1<<20];
double x[20],y[20];
inline int min_(int a,int b){
	if(a>b) return b;
	return a;
}
int dfs(int check){
	if(check==((1<<n)-1)) return 0;
	if(dp[check]!=INT_MAX) return dp[check];
	for(int i=1,o;i<=n;i++)
	    if(!((check>>(i-1))&1)){
	     	o=0;
	     	for(int j=1;j<=n;j++)
	            if(i!=j && x[i]!=x[j] && !((check>>(j-1))&1)){
	            	double a=(y[i]*x[j]-y[j]*x[i])/(x[i]*x[j]*(x[i]-x[j])),b=(y[i]-a*x[i]*x[i])/x[i];
	            	if(a>=0) continue;
					o=1;
	            	int p=check,temp;
	  				for(int k=1;k<=n;k++) 
					  	if(!((check>>(k-1))&1) && abs(a*x[k]*x[k]+b*x[k]-y[k])<eps) 
						  	check^=(1<<(k-1));
					dp[check]=min_(dp[check],dfs(check)+1);
					check=p;
				}
			if(!o) dp[check]=min_(dp[check],dfs(check^(1<<(i-1)))+1);
		} 
	  return dp[check];
}

int main(){
	scanf("%d",&t);
	for(int tt=1;tt<=t;tt++){
		scanf("%d%d",&n,&m);
		for(int i=1;i<=n;i++) 
			scanf("%lf%lf",&x[i],&y[i]);
		for(int i=0;i<(1<<n);i++) 
			dp[i]=INT_MAX;
		printf("%d\n",dfs(0));
	}
	return 0;
}

还望大佬不吝赐教!

2020/8/12 16:36
加载中...