«問題描述:
深海資源考察探險隊的潛艇將到達深海的海底進行科學考察。潛艇內有多個深海機器
人。潛艇到達深海海底後,深海機械人將離開潛艇向預定目標移動。深海機械人在移動中還
必須沿途採集海底生物標本。沿途生物標本由最先遇到它的深海機械人完成採集。每條預定
路徑上的生物標本的價值是已知的,而且生物標本只能被採集一次。本題限定深海機械人只
能從其出發位置沿著向北或向東的方向移動,而且多個深海機械人可以在同一時間佔據同一
位置。«程式設計任務:
用乙個p´q 網格表示深海機械人的可移動位置。西南角的座標為(0,0),東北角的坐
標為 (q,p)。
給定每個深海機械人的出發位置和目標位置,以及每條網格邊上生物標本的價值。計算
深海機械人的最優移動方案,使深海機械人到達目的地後,採集到的生物標本的總價值最高。
«資料輸入:
由檔案shinkai.in提供輸入資料。檔案的第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)位置座標作為目的地。
«結果輸出:
程式執行結束時,將採集到的生物標本的最高總價值輸出到檔案shinkai.out中。
shinkai.in
1 12 2
1 23 4
5 67 2
8 10
9 32 0 0
2 2 2
shinkai.out
1<=p,q<=15 1<=a,b<=10
/*費用流。
因為每條邊可以隨便走,並且只能獲利一次,所以把每條邊拆成兩條邊,
一條容量為1,費用為w,另一條容量無限,費用為0。
注意體面中的x,y座標比較坑。
*/#include
#include
#include
#define n 1010
#define inf 1000000000
using
namespace
std;
int head[n],dis[n],inq[n],fa[n],a,b,p,q,s,t,cnt=1
;struct nodee[n*10
];queue
q;void add(int u,int v,int f,int
w)bool
spfa()}}
return dis[t]!=inf;
}int
updata()
i=fa[t];
while
(i)
return x*dis[t];
}int id(int x,int y)
intmain()
for(int j=1;j<=q;j++)
for(int i=1;i)
for(int i=1;i<=a;i++)
for(int i=1;i<=b;i++)
int minv=0
;
while
(spfa())
minv+=updata();
printf("%d
",-minv);
return0;
}
深海機械人問題
這題的題面描述。有點問題。座標寫的很亂。這道題其實和著名dp問題方格取數很像qwq 我們發現機械人可以重複經過邊,但只能對答案貢獻一次,所以兩點間連兩條邊。一條是容量1帶的費用。另一條沒費用容量inf。用拆點嗎?不用的。因為這個權值是走過邊會有,所以這題中不用拆點。起點連s容量機械人,終點連t容量機...
深海機械人問題
費用流,兩個點間連費用為負價值容量為1的邊,再連費用為零容量為inf的邊,建立s,t,分別向起點終點連邊,跑最小費用流,對答案取反即可 水 include define rg register define il inline define fill a,b memset a,b,sizeof a ...
深海機械人問題
深海資源考察探險隊的潛艇將到達深海的海底進行科學考察。潛艇內有多個深海機械人。潛艇到達深海海底後,深海機械人將離開潛艇向預定目標移動。深海 機械人在移動中還必須沿途採集海底生物標本。沿途生物標本由最先遇到它的深海機械人完成採集。每條預定路徑上的生物標本的價值是已知的,而且生物標本只能 被採集一次。本...