POJ 1062 昂貴的聘禮

2021-08-08 21:33:46 字數 1139 閱讀 5599

題目:

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...