[Codeforces] 1065 Three pieces
LINK:http://codeforces.com/contest/1065/problem/D
SOL:http://codeforces.com/contest/1065/submission/44892468
FST掉的一題。
我原本的寫法是DP,然後每次轉移的時候都BFS一次,然後寫到快瘋掉,賽中就鏘了一百多行,然後就FST了QAQ
之後好長一段時間因為這題感覺很麻煩所以就一直放著,直到後來看了別人的code後才發現原來只是我的寫法很複雜而已@@
事實上,可以將座標(x, y)、棋子編號為0, 1, 2,將所有狀態寫成( ( x*n + y )*3 + 棋子編號 ),然後就可以建出一張圖,處理只換一次棋子、只走一步的所有可能後,再用floyd warshall做全點對最短距離,接著再好好DP就OK了。
話說floyd warshall那裏應該可以更好的,因為我其實只要求從第 i 格走到第 i+1 格的不同棋子間的最短路徑就好了,所以其實是可以用dijkstra,又或者雖然沒研究過,不過好像可以用0-1DFS?
至今仍然不確定為何會FST QAQ
SOL:http://codeforces.com/contest/1065/submission/44892468
FST掉的一題。
我原本的寫法是DP,然後每次轉移的時候都BFS一次,然後寫到快瘋掉,賽中就鏘了一百多行,然後就FST了QAQ
之後好長一段時間因為這題感覺很麻煩所以就一直放著,直到後來看了別人的code後才發現原來只是我的寫法很複雜而已@@
事實上,可以將座標(x, y)、棋子編號為0, 1, 2,將所有狀態寫成( ( x*n + y )*3 + 棋子編號 ),然後就可以建出一張圖,處理只換一次棋子、只走一步的所有可能後,再用floyd warshall做全點對最短距離,接著再好好DP就OK了。
話說floyd warshall那裏應該可以更好的,因為我其實只要求從第 i 格走到第 i+1 格的不同棋子間的最短路徑就好了,所以其實是可以用dijkstra,又或者雖然沒研究過,不過好像可以用0-1DFS?
至今仍然不確定為何會FST QAQ
留言
張貼留言