萌新RE,跪地求饶……
  • 板块P1433 吃奶酪
  • 楼主Genshineer
  • 当前回复15
  • 已保存回复15
  • 发布时间2020/5/23 11:37
  • 上次更新2023/11/7 01:59:05
查看原帖
萌新RE,跪地求饶……
191248
Genshineer楼主2020/5/23 11:37

不会状压,DFS最后一个数据T了…… DP代码……

#include <bits/stdc++.h>
using namespace std;
int i,j,k,n,que[20],tot,p;
double x[20],y[20],ans,len[20][20],f[20][100000];
double jl(double x1,double y1,double x2,double y2)
{
    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main()
{
    memset(f,127,sizeof(f));
    cin>>n;
    for(int i=1;i<=n;i++)
	{
        cin>>x[i]>>y[i]; 
        f[i][(1<<(i-1))]=jl(0,0,x[i],y[i]); 
    }
    for(int i=1;i<n;i++)
        for(int j=i+1;j<=n;j++)
        	len[i][j]=len[j][i]=jl(x[i],y[i],x[j],y[j]);
    for(int s=1;s<(1<<n);s++)
	{
        for(int k=0;k<n;k++)
            if(((1<<k)&s)==0)
				que[tot++]=k;
        for(int i=1;i<=n;i++)
		{
            if(abs(f[i][s]-f[0][0])<0.0000001)
				continue; 
            for(int l=1;l<=tot;l++)
                f[que[l]+1][s|1<<(que[l])]=min(f[que[l]+1][s|1<<(que[l])],f[i][s]+len[que[l]+1][i]);
        }
    }
    ans=f[0][0]; 
    for(int i=1;i<=n;i++)
		ans=min(ans,f[i][(1<<n)-1]);
    printf("%.2lf",ans);
    return 0;
}

T了的DFS……

#include<bits/stdc++.h>
using namespace std;
int n,b[20];
double ans;
struct DM{
    double x,y;
}a[20];
double dis(int i,int j)
{
    return sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y));
}
void dfs(int tot,double s,int l)
{
    if(s>ans)
		return;
	else
	{
    	if(tot==n)
    	{
    	    ans=min(ans,s);
    	    return;
    	}
    	else
    		for(int i=1;i<=n;i++)
    		{
        		if(!b[i])
        		{
            		b[i]=1;
        		    dfs(tot+1,s+dis(l,i),i);
    	    	    b[i]=0;
	        	}
    	    }
    	return;
	}
	return;
}
int main()
{
	ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++)
		cin>>a[i].x>>a[i].y;
    a[0].x=a[0].y=0;
    ans=double(127);
    dfs(0,0,0);
    printf("%.2lf",ans);
}

………………

大佬救命…………

2020/5/23 11:37
加载中...