原題鏈結
考察:最短路+列舉
錯誤思路:
列舉所有點作為起點,看所能更新到1點的最短路.返回的dist[1]即為答案.
此思路錯在等級處理.如果以pos[1]-m<=k<=pos[1]+m,那麼交易途中的最高點和最低點就無法更新.如果在交易途中更新最高點和最低點,那麼走錯路的時候就不能回溯
參考了大佬的正確思路:
設探險家起始點為0,他到達所有物品的距離就是所有物品的原始**.設pos[1] = k
同樣是列舉,但不是列舉所有點,而是列舉等級範圍,交易成功的等級範圍一定是在[k-m,k],[k-m+1,k+1],[k-m+2,k+2]....最後到[k,k+m]
每個都進行spfa演算法即可
1 #include 2 #include 3 #include 4 #include 5 #include 6using
namespace
std;
7const
int n = 110; 8
int g[n][n],dist[n],m,n,mins = 0x3f3f3f3f
,h[n];
9bool
st[n];
10int spfa(int l,int
r)1129}
30}31return dist[1
];32}33
intmain()
34 50}
51for(int i=h[1]-m;i<=h[1];i++) mins = min(spfa(i,i+m),mins);
52 printf("
%d\n
",mins);
53return0;
54 }
poj 1062 昂貴的聘禮
這個題是乙個簡單的樹形dp,只是有乙個地位差限制,可以列舉可行區間,在可行區間裡進行dp.include include include include include include include include include include includeusing namespace st...
poj1062 昂貴的聘禮
做這題代價確實很昂貴,從昨天晚上一直到今天上午都在debug,今天上午提交還出現各種wa。比較明顯的最短路,有幾個地方要注意一下,首先建圖有個地方要注意以下,這題是用臨界矩陣儲存的有向圖,而且是由交換品指向購買品,然後將虛節點設為購買品的價值,最後列舉每乙個可能地位區間di求最短路,因為對於區間 c...
昂貴的聘禮(POJ1062)
這個玩了好久啊,是我第一次寫出這樣的最短路徑。還是參考了其它人的才出來,注意的有 1 是單向圖,2 把不滿足權值的提前全初始化。其實不用topo排序也可的。關鍵 void dfs int k include include include include include include includ...