문제
https://www.acmicpc.net/problem/2098
해설
단순히 모든 곳을 방문하는 문제면 간단 dp문제 이지만 순회를 해야하는 조건이 조금 까다로움
순회를 확인하기 위해 비트마스킹 사용
코드
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include<iostream> #include<algorithm> #include<vector> #include<cstring> using namespace std; const int INF = 987654321; int n,start[20],end[20],s,e,cost, dp[20][1<<(16)],mp[20][20]; vector<tuple<int,int,int>> v; vector<vector<int>> v_list; int go(int start,int visited){   if(visited == (1<<n)-1){     return mp[start][0] ? mp[start][0] : INF;   }   int &ret = dp[start][visited];   if(ret != -1) return ret;    ret = INF;   for(int i = 0;i<n;i++){     if(visited & (1<<i)) continue;     if(mp[start][i]== 0) continue;     ret = min(ret,go(i,visited | (1<<i)) + mp[start][i]);   }   return ret; } int main(){   cin >> n;   for(int i=0; i< n; i++){     for(int j=0;j<n;j++){       cin >> cost;       mp[i][j] = cost;     }   }   memset(dp,-1,sizeof(dp));   cout << go(0,1); } | cs | 
'백준 알고리즘(C++)' 카테고리의 다른 글
| 백준 1103번 게임 ( C++ ) (0) | 2024.09.15 | 
|---|---|
| 백준 17070번 파이프 옮기기 1 ( C++ ) (0) | 2024.09.15 | 
| 백준 1072번 게임 ( C++ ) (0) | 2024.09.11 | 
| 백준 16434번 드래곤 앤 던전 ( C++ ) (0) | 2024.09.10 | 
| 백준 1269번 대칭 차집합 ( C++ ) (0) | 2024.09.10 |