hdu3001——Travelling 三進制TSP, 狀態壓縮
Travelling
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4106 Accepted Submission(s): 1310
Problem Description
After coding so many days,Mr Acmer wants to have a good rest.So travelling is the best choice!He has decided to visit n cities(he insists on seeing all the cities!And he does not mind which city being his start station because superman
can bring him to any city at first but only once.), and of course there are m roads here,following a fee as usual.But Mr Acmer gets bored so easily that he doesn't want to visit a city more than twice!And he is so mean that he wants to minimize the total fee!He
is lazy you see.So he turns to you for help.
Input
There are several test cases,the first line is two intergers n(1<=n<=10) and m,which means he needs to visit n cities and there are m roads he can choose,then m lines follow,each line will include three intergers a,b and c(1<=a,b<=n),means
there is a road between a and b and the cost is of course c.Input to the End Of File.
Output
Output the minimum fee that he should pay,or -1 if he can't find such a route.
Sample Input
2 1
1 2 100
3 2
1 2 40
2 3 50
3 3
1 2 3
1 3 4
2 3 10
Sample Output
100
90
7
Source
2009 Multi-University Training Contest 11 - Host by HRBEU
Recommend
gaojie | We have carefully selected several similar problems for you: 3004 3002 3006 3007 3003
這題一看就是TSP,然後想到要狀壓,但是這裡每個城市最多可以走兩次,所以不能用普通的二進制來狀壓,需要三進制
三進制每一位是0 1 2, 0表示這座城市沒到過,1表示到過一次,2表示到過兩次
由於一共10座城市,我們先把3^0 --- 3 ^ 10預處理出來,然後化作三進制存好,接著就是dp,但是要注意,可以作為最後狀態的狀態,它的每一位都不為0(否則就有某個城市沒到過),最後枚舉所有可以作為尾狀態的狀態然後求個最小值就ok了
#include