深海機械人(cogs 742)

2022-05-14 05:24:29 字數 1820 閱讀 2608

«問題描述:

深海資源考察探險隊的潛艇將到達深海的海底進行科學考察。潛艇內有多個深海機器

人。潛艇到達深海海底後,深海機械人將離開潛艇向預定目標移動。深海機械人在移動中還

必須沿途採集海底生物標本。沿途生物標本由最先遇到它的深海機械人完成採集。每條預定

路徑上的生物標本的價值是已知的,而且生物標本只能被採集一次。本題限定深海機械人只

能從其出發位置沿著向北或向東的方向移動,而且多個深海機械人可以在同一時間佔據同一

位置。«程式設計任務:

用乙個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 ...

深海機械人問題

深海資源考察探險隊的潛艇將到達深海的海底進行科學考察。潛艇內有多個深海機械人。潛艇到達深海海底後,深海機械人將離開潛艇向預定目標移動。深海 機械人在移動中還必須沿途採集海底生物標本。沿途生物標本由最先遇到它的深海機械人完成採集。每條預定路徑上的生物標本的價值是已知的,而且生物標本只能 被採集一次。本...