P1171 售貨員的難題

2022-05-05 19:51:09 字數 800 閱讀 8541

題目描述

某鄉有nn個村莊(1\(1--> all --> 1\) 路徑總長度最小

除錯日誌: 又把 \(1 << (i - 1)\) 寫成了 \(1 << (num - 1)\)

小插曲: 卡空間卡到阿蘇發稿地方od撒龍捲風no, 然後這題常規做法只能開 \(o^\) 過

經典狀壓dp

\(dp[i][j]\) 表示 \(i\) 狀態下最後乙個點走 \(j\) 的最短路徑長度

轉移見**

#include#include#include#include#include#include#define ll long long

#define rep(i, x, y) for(int i = (x);i <= (y);i++)

using namespace std;

int rd()

while(c >= '0' && c <= '9')

return flag * out;

}const int maxn = (1 << 20);

int num;

int map[21][21], one[21];

int dp[maxn][21];

int main()}}

} int ans = maxn;

rep(i, 2, num)ans = min(ans, dp[maxstate][i] + map[i][1]);

printf("%d\n", ans);

return 0;

}

P1171 售貨員的難題

資料有更改 某鄉有n個村莊 11輸入格式 村莊數n和各村之間的路程 均是整數 輸出格式 最短的路程。輸入樣例 1 3 0 2 1 1 0 2 2 1 0 輸出樣例 1 3 輸入解釋 3 0 2 1 1 0 2 2 1 0 solution 法一 經典的狀壓dp題目。設f i j 表示某個狀態的最短距...

洛谷 P1171 售貨員的難題

經典的旅行商問題 dp i j 表示從j出發,去遍歷狀態為i的點,並且回到起點的最短路徑長度 初始化 dp 0 i dis i,起點 即從點i哪兒哪兒也不遍歷,直接回到起點的路徑長度 對於每乙個狀態i,列舉要從哪個點出發,去遍歷這個狀態 然後列舉這個點要直接前往的狀態中的某個點 最後輸出dp 總狀態...

P1171 售貨員的難題 暴力dp

題面 著名的tsp問題,npc問題 對於資料大的情況,我們可以使用一系列近似演算法進行尋找解。對於資料規模小的情況,我們可以直接暴力dp 一開始寫了乙個dfs,然後就被n 20的資料卡爆了 include include include includeusing std min const int ...