題目:
ac**(c++):
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0xfffffff
using
namespace std;
struct
item
;int m, n;
item* item;
int map[
105][
105];
int min;
bool vis[
105];
int hl,ll;
void
dfs(
int num,
int dist)
hl = tmphl;
ll = tmpll;
vis[num]
=false;}
intmain()}
min = item[
1].p;
hl = item[
1].l + m;
ll = item[
1].l - m;
dfs(1,
0);cout<}
總結:
1.題目的意思看似很複雜其實很簡單, 從物品1開始, 有替代品就生成一條邊, 邊的權值就是***, 邊的另一頭就是替代的物品, 再以這個替代物品繼續往下生成, 知道沒有替代品. 於是得到了乙個圖, 我們只需要從物品1開始遍歷每個節點(用什麼方法都行), 在到達每個節點的時候計算到這一節點時的總費用(即經過的所有邊+這個節點物品本身的價值), 然後與全域性最小值min比較賦值, 遍歷一遍後得到的min就是答案.
2.這題有幾個坑點, 乙個是每個物品的等級l, 網上有些人的**直接拿l跟物品1的l比較, 這是不對的(至少我提交不行, 不知道他們是怎麼弄成可以的). 我的處理辦法是取乙個區間, 深搜到達乙個節點時更新一次區間範圍, 離開節點時還原, 具體操作見**.
3.還有乙個坑點是, 不要開陣列來儲存邊資訊, 測試裡會有很多物品+每個物品有大量替代, 導致mle. 解決辦法是用二維陣列map來儲存邊資訊.
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...