Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int n;
- int dp[1 << 14][14], g[14][14], par[1 << 14][14][2];
- int INF = 1e9 + 7;
- int main () {
- cin >> n;
- for (int i = 0; i < n; ++i) {
- for (int j = 0; j < n; ++j) {
- cin >> g[i][j];
- }
- }
- for (int mask = 0; mask < (1 << n); ++mask) {
- for (int j = 0; j < n; ++j) {
- dp[mask][j] = INF;
- }
- }
- for (int i = 0; i < n; ++i) {
- dp[(1 << i)][i] = 0;
- }
- for (int mask = 0; mask < (1 << n); ++mask) {
- for (int last = 0; last < n; ++last) {
- if ((mask & (1 << last))) {
- for (int cur = 0; cur < n; ++cur) {
- if (!(mask & (1 << cur))) {
- if (dp[mask][last] + g[last][cur] < dp[mask | (1 << cur)][cur]) {
- dp[mask | (1 << cur)][cur] = dp[mask][last] + g[last][cur];
- par[mask | (1 << cur)][cur][0] = mask;
- par[mask | (1 << cur)][cur][1] = last;
- }
- }
- }
- }
- }
- }
- /*
- for (int mask = 0; mask <= (1 << n) - 1; ++mask) {
- for (int last = 0; last < n; ++last) {
- cout << mask << " "<< last << " " << dp[mask][last]<<endl;
- }
- }
- */
- cout << dp[1][0]<<endl;
- int ans = 0;
- for (int i = 1; i < n; ++i) {
- if (dp[(1 << n) - 1][i] < dp[(1 << n) - 1][ans]) {
- ans = i;
- }
- }
- cout << dp[(1 << n) - 1][ans];
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement