hdu 3001(狀態壓縮dp)

2021-07-02 04:45:30 字數 770 閱讀 2629

#include #include #include #define max1 10  

#define max2 59049 // 3^10

#define inf 0x3f3f3f3f

using namespace std;

/*由於每個點可經過兩次 用三進製數表示狀態 例10020(三進製)表示經過點2兩次點1一次其餘點都沒經過*/

int n, m, ans;

int pow[max1 + 2], state[max2 + 2][max1 + 2];

//pow[n]意為3^n, state[n][m]意為狀態n下經過m點的次數

int dp[max2 + 2][max1 + 2], map[max1 + 2][max1 + 2];

//dp[n][m]意為狀態為n且現位於m點時的費用, map即為鄰接矩陣存圖

inline int min(int a, int b)

void init()

} //將十進位制數i轉化為三進製數,初始化state

}bool check(int x)

return flag;

//檢測狀態x是否經過所有點

}void dp()

} }}int main()

dp();

if(ans == inf)

ans = -1;

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

} return 0;

}

HDU 3001(狀態壓縮dp)

這是我第一次寫的過了所有的樣例,但是wa因為題目是說每個點可以走兩次,而我剛開始以為這題就是裸的旅行家問題,後台資料一定專門設定了某個點重複走兩次會更小的情況,所以這裡需要一種新的方法,三進製!標記 提供幾組測試資料 輸入 5 5 2 1 1 3 1 1 4 1 1 5 1 1 2 5 10 答案 ...

hdu3001 三進製 狀態壓縮dp

都過了這麼久了。我連這麼基礎的狀態壓縮dp都不會。收穫 1 沒有關於樹這種說法中。要記得注意重邊,2 原來的多進製是這樣弄得。3 他這裡更新答案的時候是怎樣更新的。include include include include include include include include incl...

hdu 3001 類似旅行商

裡面包含了很多內容的一道題 可以學到很多 題意 很簡單 就是乙個人 要繞城市一圈 不必回到起點 但是每個城市都要經過 並且最多每個重複走2次 注意 城市數量是 10的 如果 你以前就遇到過 類似的題 肯定能很快反應過來 狀壓dp 在某一維開個3維陣列 0 1 2分別城市在該狀態下經過某城市的次數為多...