1 #include <iostream> 2 #include <limits.h> 3 #include <string.h>; 4 using namespace std; 5 #define MAX_N 5 6 #define INF 9999 7 int n=5; 8 int d[MAX_N][MAX_N]={ 9 {INF,3,INF,4,INF}, 10 {INF,INF,5,INF,INF}, 11 {4,INF,INF,5,INF}, 12 {INF,INF,INF,INF,3}, 13 {7,6,INF,INF,INF} 14 }; 15 int rec(int,int); 16 int dp[1<<MAX_N][MAX_N]; 17 int main() { 18 memset(dp,-1,sizeof(dp)); 19 int ans=rec(0,0); 20 cout<<ans<<endl; 21 22 } 23 24 int rec(int s,int v){ 25 if(dp[s][v]>=0){ 26 return dp[s][v]; 27 } 28 29 if(s==(1<<n)-1&&v==0){ 30 return dp[s][v]=0; 31 } 32 33 int res=INF; 34 for(int i=0;i<n;i++){ 35 if(!(s>>i & 1)){ 36 res=min(res,rec(s|1<<i,i)+d[v][i]); 37 //cout<<i<<endl; 38 } 39 } 40 return dp[s][v]=res; 41 }