`這是我第一次寫的過了所有的樣例,但是wa因為題目是說每個點可以走兩次,而我剛開始以為這題就是裸的旅行家問題,後台資料一定專門設定了某個點重複走兩次會更小的情況,所以這裡需要一種新的方法,三進製!標記
提供幾組測試資料:
輸入 5 5
2 1 1
3 1 1
4 1 1
5 1 1
2 5 10
答案 14
輸入 8 9
2 1 1
3 1 1
4 1 1
5 1 1
2 5 10
4 7 1
4 6 1
4 8 1
8 7 10
答案 27
輸入 1 0
答案 0
#include
#include
#include
#include
#include
using
namespace
std;
const
int inf = 0x3f3f3f3f;
int route[15][15];
int dp[1
<< 10][10];
int main()
for (int i = 0; i < n; i++)
int end =( 1
<< n ) - 1;
for (int i = 0; i < n; i++)
for (int i = 0; i <= end; i++)}}
}}
int min=inf;
for (int i = 0; i < n; i++)
if (min > inf - 100)
else
}return
0;}
正確ac**
#pragma warning(disable:4996)
#include
#include
#include
#include
#include
using
namespace
std;
const
int inf = 0x3f3f3f3f;
int state[12];//儲存3進製
int visited[60000][12];
int dp[60000][12];//狀態為i時以j結尾的最小權值
intmap[12][12];//儲存圖
int n, m;
void initiate()
儲存3進製每一位對應的數值
for (int i = 0; i <= state[10]; i++)//將 所有不超過59049的數以三進製的形式儲存下來,
//這樣只需要處理一邊節省時間,如果是只能訪問一邊不需要處理因為,電腦本身就是二進位制
}}int main()
int max = inf;
for (int i = 0; i//列舉所有狀態
}
if (flag)
return
0;}
#pragma warning(disable:4996)
#include
#include
#include
#include
#include
using
namespace
std;
const
int inf = 0x3f3f3f3f;
int state[12];
int visited[80000][15];
intmap[15][15];
int dp[80000][15];
void init()
for (int i = 0; i < state[10] - 1; i++)
}}int main()
for (int i = 0; i < n; i++)
for (int i = 0; i 0][i] = 0;
}for (int i = 0; i <= state[n] - 1; i++)}}
int min = inf;
int s = 0;
for (int i = 0; i for (int i = s; i <= state[n] - 1; i++)
if (flag)
for (int j = 0; j < n; j++)
}if (min == inf)
cout
<< "-1"
<< endl;
else
cout
<< min << endl;
}return
0;}
hdu 3001(狀態壓縮dp)
include include include define max1 10 define max2 59049 3 10 define inf 0x3f3f3f3f using namespace std 由於每個點可經過兩次 用三進製數表示狀態 例10020 三進製 表示經過點2兩次點1一次其餘...
hdu3001 三進製 狀態壓縮dp
都過了這麼久了。我連這麼基礎的狀態壓縮dp都不會。收穫 1 沒有關於樹這種說法中。要記得注意重邊,2 原來的多進製是這樣弄得。3 他這裡更新答案的時候是怎樣更新的。include include include include include include include include incl...
hdu 3001 類似旅行商
裡面包含了很多內容的一道題 可以學到很多 題意 很簡單 就是乙個人 要繞城市一圈 不必回到起點 但是每個城市都要經過 並且最多每個重複走2次 注意 城市數量是 10的 如果 你以前就遇到過 類似的題 肯定能很快反應過來 狀壓dp 在某一維開個3維陣列 0 1 2分別城市在該狀態下經過某城市的次數為多...