求大佬看看状压记忆化搜索有过的可能吗
查看原帖
求大佬看看状压记忆化搜索有过的可能吗
602361
114514wxy楼主2023/12/30 17:26
#include<bits/stdc++.h>
using namespace std;
const int N=22,INF=0x7f7f7f7f;

int n,dis[N][N];
int dp[N][1<<N];
bool v[N];

inline int mn(int a,int b){
	return (a<b)?a:b;
}

int dfs(int p,int zt,int stp){
	if(stp>=n) return dis[p][1];
	if(dp[p][zt]) return dp[p][zt];
	
	v[p]=1,dp[p][zt]=INF;
	for(int i=1;i<=n;++i){
		if(v[i]) continue;
		dp[p][zt]=mn(dfs(i,zt+(1<<p),stp+1)+dis[p][i],dp[p][zt]);
	}
	v[p]=0;
	return dp[p][zt];
}

int read();
int main(){
	
	n=read();
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
			dis[i][j]=read();
	
	printf("%d\n",dfs(1,0,1));
	return 0;
}

int read(){
	int rn=0,rf=1; char rc=getchar();
	while(rc<'0'||rc>'9') rf=(rc=='-')?-1:1,rc=getchar();
	while(rc>='0'&&rc<='9') rn=(rn<<1)+(rn<<3)+(rc^48),rc=getchar();
	return rn*rf;
}
2023/12/30 17:26
加载中...