深海機械人問題

2022-05-10 23:56:57 字數 2031 閱讀 8875

深海資源考察探險隊的潛艇將到達深海的海底進行科學考察。潛艇內有多個深海機械人。潛艇到達深海海底後,深海機械人將離開潛艇向預定目標移動。深海 機械人在移動中還必須沿途採集海底生物標本。沿途生物標本由最先遇到它的深海機械人完成採集。每條預定路徑上的生物標本的價值是已知的,而且生物標本只能 被採集一次。本題限定深海機械人只能從其出發位置沿著向北或向東的方向移動,而且多個深海機械人可以在同一時間佔據同一位置。

用乙個 p×q 網格表示深海機械人的可移動位置。西南角的座標為(0,0),東北角的座標為 (q,p)。

給定每個深海機械人的出發位置和目標位置,以及每條網格邊上生物標本的價值。計算深海機械人的最優移動方案,使深海機械人到達目的地後,採集到的生物標本的總價值最高。

輸入格式:

由檔案 input.txt 提供輸入資料。檔案的第 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)位置座標作為目的地。

輸出格式:

程式執行結束時,將採集到的生物標本的最高總價值輸出到檔案 output.txt 中。

輸入樣例#1:複製

1 1

2 21 2

3 45 6

7 28 10

9 32 0 0

2 2 2

輸出樣例#1:複製

42

最小費用流

每乙個起點和源點連一條流量為機器數量權為0的邊,寫為

每乙個終點和源點連一條的邊

由於每乙個邊可以無限經過,又只有乙個可以得到價值

所以對於每乙個邊建一條<1,-val>和一條

然後做最小費用流,因為求最大值,所以邊權取負,輸出×(-1)

因為可以多次經過,所以不需要拆點,只要給帶權值的邊限流

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7struct

node

8edge[20001

];11

int head[1001],num=1

,inf;

12int a,b,n,m,path[2001],dist[2001],ans,flow,map[1001][1001

];13

bool vis[1001

];14

void add(int u,int v,int c,int

dis)

1531

bool spfa(int s,int

t)3259}

60}61}

62if (dist[t]==inf) return0;

63return1;

64}65int mincost(int s,int

t)66

78 flow+=minf;

79}

80return

ans;81}

82int

main()

83 101

}102

for (j=0;j<=m;j++)

103110

}111

for (i=1;i<=a;i++)

112116

for (i=1;i<=b;i++)

117121 cout<

);122 }

深海機械人問題

這題的題面描述。有點問題。座標寫的很亂。這道題其實和著名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 ...

作文 深海機械人 機械人

科學?什麼是科學?我終於漸漸地明白。科學就好像發明家,發明一些新的東西。如,電視 電腦 電燈 機械人等等。在這寫發明當中,我最喜歡機械人。機械人顧名思義是由機器做成的 人 機械人是不會累,你叫它做什麼,它就做什麼,很聽話。現在讓我介紹一下我最喜歡的機械人吧!中藥配藥是一項很費時的工作,但現在,你要是...