题目描述的很清楚,关于答案的由来可以这样看,探险家花50买到编号4的物品,接着拿4和200金币买到编号3,然后拿着3和2000金币买到1,故总共花去了5250金币,并且交易中等级最高的是3,最低的是2,没超过1,故此发可行,故最少花费金币是5250.如果将题目的数据改为
1 4
10000 3 2
2 8000
3 5000
1000 2 1
4 200
3000 1 1
4 200
50 2 0
则答案不是5250了,因为刚才交易的顺序是4-3-1,而3的等级是1,1的等级是3,两者等级差超过了m(=1),故不能这样交换,则此时交换的顺序应该为4-2-1,此时花费最少金币为8250.
昨天开始做这道题目时感觉好难,因为,还没怎么写图论题,想套模板也不知道怎么套,就是有点思路,但不会写,也许是对图论题目不是很熟,今天AC了几道基本题后,再来做这题,有点感觉了,一次AC
要AC这道题,就要所选路径的等级差小于m,解决这个问题我的办法就是将等级限定在某个闭区间[a,a+m],明显第一个人的等级必须要在这个区间内。然后就是选择Dijkstra的算法,每次加入点时就更新外面的点的最短路,注意,不在闭区间的点就不用考虑。先前没写过该算法,但好像Prim算法和这好像,就将Prim算法初略该变了一下,同样AC了
1 |
|