关于 long double
查看原帖
关于 long double
511609
无钩七不改名楼主2023/4/22 10:27

RT.

下面代码第 6 行,数据类型改成 long double 为什么最后输出的结果变成 0.00 。(别管原代码对不对先)

#include<bits/stdc++.h>
using namespace std;

int n;
int x[20],y[20];
double a[20][20],f[1<<16][17],ans=(1<<31)-1;

int main(){
	scanf("%d",&n);
	memset(f,127,sizeof(f));
	cout<<ans<<" "<<f[1]<<" "<<f[2]<<" "<<f[3]<<endl;
	for(int i=1;i<=n;i++){
		scanf("%d%d",&x[i],&y[i]);
		for(int j=0;j<=i;j++){
			a[j][i]=a[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
		f[1<<(i-1)][i]=a[0][i];
	}
	for(int i=2;i<(1<<n);i++){
		for(int j=1;j<=n;j++){
			if(i&(1<<(j-1))){
				for(int k=1;k<=n;k++){
					if((i&(1<<(k-1)))&&j!=k)f[i][j]=min(f[i][j],f[i-(1<<(k-1))][j]+a[j][k]);
				}
			}
		}
	}
	for(int i=1;i<=n;i++)ans=min(ans,f[(1<<n)-1][i]);
	printf("%.2f",ans);
	return 0;
} 

蟹蟹泥 qwq

2023/4/22 10:27
加载中...