深海資源考察探險隊的潛艇將到達深海的海底進行科學考察。
潛艇內有多個深海機械人。潛艇到達深海海底後,深海機械人將離開潛艇向預定目標移動。
深海機械人在移動中還必須沿途採集海底生物標本。沿途生物標本由最先遇到它的深海機械人完成採集。
每條預定路徑上的生物標本的價值是已知的,而且生物標本只能被採集一次。
本題限定深海機械人只能從其出發位置沿著向北或向東的方向移動,而且多個深海機械人可以在同一時間佔據同一位置。
用乙個p×q 網格表示深海機械人的可移動位置。西南角的座標為 (0,0),東北角的座標為 (q,p) 。
給定每個深海機械人的出發位置和目標位置,以及每條網格邊上生物標本的價值。
計算深海機械人的最優移動方案, 使深海機械人到達目的地後,採集到的生物標本的總價值最高。
輸入格式:
檔案的第 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)位置座標作為目的地。
a行和b行輸入時橫縱座標要反過來
輸出格式:
輸出採集到的生物標本的最高總價值.
輸入噴我一臉。
在邊界建兩條流,一條流量為1有費用,一條為0無費用
**:
1 #include2 #include3 #include4 #include5const
int oo=0x3f3f3f3f;6
struct
pntp[100000
];14
struct
ente[1000000
];20
intcnt;
21int
n,m;
22int
s,t;
23int
ns,nt;
24int no[101][101
];25 std::queueq;
26void ade(int f,int t,int v,int
d)27
36bool spfa(void)37
43 p[t].pre=-1
;44 p[s].dis=0
;45 p[s].vis=true;46
while(!q.empty())
47q.pop();
48q.push(s);
49while(!q.empty())
5068}69
}70return p[t].pre!=-1;71
}72int ek(void)73
83}84return
ans;85}
86int
main()
87108
}109
for(int j=0;j<=m;j++)
110120
}121
for(int i=1;i<=ns;i++)
122128
for(int i=1;i<=nt;i++)
129135 printf("
%d\n
",-ek());
136return0;
137 }
luogu P4012 深海機械人問題
費用流問題,每個樣本選一次,就連一條capacity為1,權為給定的值,因為可以重複走,再連capacity為無窮,權為0的邊,再一次連線給定的出點和匯點即可 includeusing namespace std define lowbit x x x typedef long long ll co...
P4012 深海機械人問題
深海資源考察探險隊的潛艇將到達深海的海底進行科學考察。潛艇內有多個深海機械人。潛艇到達深海海底後,深海機械人將離開潛艇向預定目標移動。深海機械人在移動中還必須沿途採集海底生物標本。沿途生物標本由最先遇到它的深海機械人完成採集。每條預定路徑上的生物標本的價值是已知的,而且生物標本只能被採集一次。本題限...
深海機械人問題
這題的題面描述。有點問題。座標寫的很亂。這道題其實和著名dp問題方格取數很像qwq 我們發現機械人可以重複經過邊,但只能對答案貢獻一次,所以兩點間連兩條邊。一條是容量1帶的費用。另一條沒費用容量inf。用拆點嗎?不用的。因為這個權值是走過邊會有,所以這題中不用拆點。起點連s容量機械人,終點連t容量機...