APCS202101 第2題流量
作業上傳:http://203.68.236.9/problem/c0107
zerojudge網址:https://zerojudge.tw/ShowProblem?problemid=f606
有 n 個伺服器編號 0 到 n−1,以及 m 個城市編號 0 到 m−1,已知第 i 個伺服器要傳送到城市 j 的流量為 Q[i][j]。
工程師們在規劃每個伺服器應該要放在哪個城市,對於一個方案 c=(c1,c2,c3,…cn),表示編號 i 的伺服器要放在城市 ci。
城市之間資料傳輸是需要費用的,若城市u 要傳送 f 的流量到城市 v,費用的計算方式如下:
若 u=v,每單位流量需要花 1 塊錢。
若 u≠v,小於等於 1000 的流量每單位要 3 塊錢,大於 1000 的部份每單位 2 塊錢。
若城市u 有多個伺服器都要傳送流量到城市 v,會先將這些起點終點相同的傳輸流量相加再計算花費。
工程師們總共提出了 k 種方案,請你找到花費最少的方案所需的費用。
輸入說明
第一行包含三個整數 n,m,k。接下來 n 行每行有 m 個整數,第 i 行的第 j 個數字為 Q[i][j]。 接下來有 k 行,每行有 n 個整數,表示一個方案。
配分 20分: n=1,k=1,1≤m≤50
30分: n=1,1≤m,k≤50
50分:1≤n, m,k≤50
輸出說明
輸出費用最小的方案所需的花費。
輸入範例
2 3 3
30 23 23
5 25 3
0 0
0 1
0 2
3 4 5
500 400 800 200
500 400 100 600
450 420 800 790
0 0 0
0 1 2
0 2 2
2 1 2
1 1 1
輸出範例
217
13470
測資說明
第一組
將伺服器放置在0 0,第0台伺服器放置在第0個城市,第1台伺服器放置在第0個城市,伺服器都在第0個城市,將相同目標城市的流量相加,伺服器所在城市會影響流量的來源城市。
(30+5)*1+(23+25)*3+(23+3)*3=257
將伺服器放置在0 1,第0台伺服器放置在第0個城市,第1台伺服器放置在第1個城市,伺服器在不同城市,流量不需要相加。
30*1+23*3+23*3 = 168 , 5*3+25*1+3*3 = 49 , 168+49=217
將伺服器放置在0 2,第0台伺服器放置在第0個城市,第1台伺服器放置在第2個城市,伺服器在不同城市,流量不需要相加。
30*1+23*3+23*3 = 168 , 5*3+25*3+3*1 = 93 , 168+93=261
答案:217
解題策略
伺服器會隨著輸入而放置在不同城市,會影響費用計算的來源城市,需先將相同到達城市的流量累加起來,使用map與deque,相同城市的伺服器放在同一個deque,累加所有伺服器在同一個城市的流量,再根據條件計算費用。