怎么将程序加快0.2~0.4s
查看原帖
怎么将程序加快0.2~0.4s
415320
没见过AC楼主2023/5/1 08:59

最后一个点T了,大概1.2~1.4s

#include<bits/stdc++.h>
using namespace std;
const int N=100;
typedef long long ll;
inline int read()
{
    int n=0,x=1;char ch=getchar();
    if(ch=='-') x=-1;
    while(ch<'0'||'9'<ch)ch=getchar();
    while(ch>='0'&&ch<='9'){n=n*10+ch-'0';ch=getchar();}
    return n*x;
}
unsigned int m,n,g[N][N],ans=25*1000,min_[N][N],a[N][N],d[N];
bool b[N];
inline int minn(int x,int y)

{
	if(x>y) return y;
	else return x;
}
inline void dfs(int now,int c,int s)
{
	if(s>=ans) return;
	if(s+(n-c+1)>=ans) return;
	if(c==n)
	{
		ans=minn(ans,s+d[now]);
        return;
	}
	for(register int i=1;i<=n;i++)
	{
		if(b[a[now][i]])
		{
			
			b[a[now][i]]=0;
			dfs(a[now][i],c+1,s+g[now][i]);
			b[a[now][i]]=1;
		}
	}
	return;
}
int main()
{
    memset(b,1,sizeof b);
	cin>>n;
	for(register int i=1;i<=n;i++)
	{
		for(register int j=1;j<=n;j++)
		{
			g[i][j]=read();
			a[i][j]=j;
		}
		d[i]=g[i][1];
	}
		
	for(register int k=1;k<=n;k++)
	for(register int i=1;i<=n;i++)
	{
		for(register int j=1;j<n-i;j++)
		{
			if(g[k][j]>g[k][j-1])
			{
				swap(g[k][j],g[k][j+1]);
				swap(a[k][j],a[k][j+1]);
			}
		}
	}
	
	b[1]=0;
	dfs(1,1,0);
	cout<<ans;
	return 0;
}

2023/5/1 08:59
加载中...