這個題目我最開始看題目看了半天,看不懂。。
可是通過看例子及答案最終看懂了。
首先先解決等級的關係。
。假設等級越界。則不能交換。。所以原本等級的界限是
[rank[1]-m,rank[1]+m],可是這個邊界裡面會出現等級僅僅差大於m。所以等級的區間應該是
[rank[1]-m,rank[1]],[rank[1]-m+1,rank[1]+1]............等等。所以一直列舉到 [rank[1],rank[1]+m]..所以先通過列舉得到能夠交換的點。
。然後就是題目的意思了。
我理解的優惠相當於是分解。
。。比方假設得到1號物品須要得到2號物品和8000金幣。不就相當於1號到2號號為單向路勁,權值為8000.。
。求各個點到1號點的最短路加上這個點的價值。。
如圖所看到的。
1(10000)---------->2(1000)--------->4(50)
| 8000 200 |
|--------------------->3(3000)----------|
5000 200
繪圖之後一目了然。。。
然後運用dijkstra解決。
希望各位指正我的想法。。
**例如以下:
#include#include#define inf 0x3f3f3f3f
const int maxn=100+10;
int m,n;
int vis[maxn],dis[maxn],e[maxn][maxn];
int withtin[maxn],value[maxn],ranki[maxn];
int dijkstra()
}tmp=inf;
for(i=1;i<=n;i++)
cost=dijkstra();
if(cost
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...