acwing 91. 最短Hamilton路径
作者:互联网
状压dp,模板
f[i][j]表示以i为当前状态,j为终点的路径长度,属性:min
#include<bits/stdc++.h>
using namespace std;
const int N = 21,M = 1<<20;
int f[M][N],weight[N][N];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>weight[i][j];
memset(f,0x3f,sizeof f);
f[1][0]=0;
for(int i=0;i<1<<n;i++)//遍历每个状态
for(int j=0;j<n;j++)
if(i>>j&1)//判断j能否作为终点
for(int k=0;k<n;k++)
if((i-(1<<j))>>k&1)//判断以j为终点的点能否由以k为终点的点转移过来
f[i][j]=min(f[i][j],f[i-(1<<j)][k]+weight[k][j]);
cout<<f[(1<<n)-1][n-1];
return 0;
}
标签:终点,min,int,路径,0x3f,能否,Hamilton,91,acwing 来源: https://www.cnblogs.com/xhy666/p/16253073.html