深海資源考察探險隊的潛艇將到達深海的海底進行科學考察。
潛艇內有多個深海機械人。
潛艇到達深海海底後,深海機械人將離開潛艇向預定目標移動。
深海機械人在移動中還必須沿途採集海底生物標本。
沿途生物標本由最先遇到它的深海機械人完成採集。
每條預定路徑上的生物標本的價值是已知的,而且生物標本只能被採集一次。
本題限定深海機械人只能從其出發位置沿著向北或向東的方向移動,而且多個深海機械人可以在同一時間佔據同一位置。
用乙個 p×
q 網格表示深海機械人的可移動位置。
西南角的座標為(0,
0 ),東北角的座標為 (q,
給定每個深海機械人的出發位置和目標位置,以及每條網格邊上生物標本的價值。
計算深海機械人的最優移動方案,使深海機械人到達目的地後,採集到的生物標本的總價值最高。 第
1 行為深海機械人的出發位置數
a,和目的地數
b ,第
2行為
p 和
q的值。
接下來的 p+
1 行,每行有
q 個正整數,表示向東移動路徑上生物標本的價值,行資料依從南到北方向排列。
再接下來的 q+
1行,每行有
p 個正整數,表示向北移動路徑上生物標本的價值,行資料依從西到東方向排列。
接下來的
a行,每行有
3 個正整數 k,
x,y,表示有
k 個深海機械人從 (x
,y)位置座標出發。
再接下來的
b 行,每行有
3個正整數 r,
x,y ,表示有
r 個深海機械人可選擇 (x
,y)位置座標作為目的地。
程式執行結束時,將採集到的生物標本的最高總價值輸出。
1 1看到這題的輸入格式,我簡直就無語了。2 2
1 2
3 4
5 6
7 2
8 10
9 3
2 0 0
2 2 2
這個出題人的語文是**學的,光是輸入部分我就看了老半天……
這個題目就是之前的火星問題的公升級版,只不過權值到了邊上,而起點和終點變成了多個,反而使題目變簡單了(因為不再有沒有權值的邊,而且權值在邊上比權值在點上多了乙個好處——不用拆點)。
乙個簡單的費用流就可以了。
[cpp]
#include
#include
#include
#include
#define ss 99999
#define tt 100000
#define inf 0x3f3f3f3f
#define min(x,y) ((x)
#define pla(x,y) ((x)*(qs+1)+(y))
using
namespace std;
int a,b,cnt,ans,ps,qs;
int nxt[100010],head[100010],data[100010];
int flow[100010],wei[100010];
int dis[100010];
int pre[100010];
queueq;
bool in_stack[100010];
void add(int x,int y,int a,int b)
bool bfs()
}
}
}
return pre[tt]!=-1;
}
void dfs()
int main()
for(int i=1;i<=qs+1;i++)
for(int j=1;j<=ps;j++)
for(int i=1;i<=a;i++)
for(int i=1;i<=b;i++)
while(bfs())
dfs();
printf(」%d\n」,-ans);
return 0;
}
網路流二十四題 深海機械人問題 Solution
給一張網格圖,圖上有一些機械人,它們要到指定的地方,它們都只能往東和北移動,每條邊都有價值,但是只能計算一次,問可以達到的最大價值。因為只能計算一次,所以可以這樣建邊 之後 因為要最大費用,所以可以把邊權取反。c od e code code include int a,b int p,q int ...
網路流二十四題
開始了我的網路流 24 題之旅,寫在一起到時候方便一起複習哦。其實這並不是真的二十四題,有一些過於水的我就不寫上來了。然後有的 太水了就不寫了。感覺這些題目還是比較基礎的,方法卻值得借鑑!剩餘題目 航空路線問題 火星探險問題以下 題目描述 點此看題 解法 你發現時間是最大的障礙,因為對於不同的時間飛...
深海機械人 網路流
深海資源考察探險隊的潛艇將到達深海的海底進行科學考察。潛艇內有多個深海機械人。潛艇到達深海海底後,深海機械人將離開潛艇向預定目標移動。深海機械人在移動中還必須沿途採集海底生物標本。沿途生物標本由最先遇到它的深海機械人完成採集。每條預定路徑上的生物標本的價值是已知的,而且生物標本只能被採集一次。本題限...