是不是记忆化的问题(直接脱掉函数会快多少)
#include<bits/stdc++.h>
using namespace std;
const int N=25,NN=(1<<20)+5;
int n,EndSta;
int a[N][N];
int f[N][NN];
bool vis[N][NN];
int dfs(int la,int sta)//最后一步为la,当前状态为sta
{
if(sta==EndSta)return a[la][1];
if(vis[la][sta])return f[la][sta];
vis[la][sta]=1;
for(int i=2;i<=n;i++)
{
// printf("%d %d %d\n",sta,1<<i,sta&(1<<i));
if((sta&(1<<i))==0)//未走过i
{
// printf("%d %d\n",sta,i);
f[la][sta]=min(f[la][sta],dfs(i,sta|(1<<i))+a[la][i]);
}
}
return f[la][sta];
}
int main(){
scanf("%d",&n);memset(f,123,sizeof(f));
EndSta=(1<<n+1)-2;
// cout<<EndSta<<"\n";
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&a[i][j]);
printf("%d",dfs(1,2));
return 0;
}