codevs1227(方格取數費用流)

2021-07-15 18:04:33 字數 774 閱讀 9488

給出乙個n*n的矩陣,每一格有乙個非負整數aij,(aij <= 1000)現在從(1,1)出發,可以往右或者往下走,最後到達(n,n),每達到一格,把該格仔的數取出來,該格仔的數就變成0,這樣一共走k次,現在要求k次所達到的方格的數的和最大

控制流量,每乙個格仔最多走一次,使費用最大,可以發現這是費用流。

首先對於每乙個格仔,我們拆成兩個點(因為要限制流量);每乙個格仔可以取一次,但是每乙個格仔是可以走多次的,那麼我們在兩個點中建兩種邊,

1:費用為權值,流量為一,2:費用為0,流量為inf。分別代表兩種情況。

又寫炸了。。細節注釋中

#include#include#include#include#include#include#include#define debug(x) cout<<#x<<"="while (!q.empty())

int work()

return ans;

}int main()

addedge(s,id1[1][1],k,0);

addedge(id2[n][n],t,k,0);

printf("%d",work());

return 0;

}

總結1:費用流當中,在兩個點之間加兩種不同的邊,來代表不同的情況,且兩種邊的費用不同,由此又能限制流的順序,從而限制情況選擇的順序。

這是費用流當中,關於兩個點之間不同方案的常用方法

本題當中是在,分點的入點和出點之間的兩種情況建的邊

codevs 1227 方格取數2

網路流 拆點 好像hdu上有類似的題。那時我還是用pascal寫的 算是裸題吧。然而我本不會費用流 看了下黃學長的 說下自己的理解 黃學長只貼了 把每乙個點拆成兩個點,乙個是流進的,乙個是流出的 然後建邊。這兩個點之間有這幾類邊 由流入點指向流出點,流量為1,費用為map i,j 由流出點指向流入點...

code vs 1227 方格取數 2

時間限制 1 s 空間限制 128000 kb 題目等級 大師 master 題解 檢視執行結果 給出乙個n n的矩陣,每一格有乙個非負整數aij,aij 1000 現在從 1,1 出發,可以往右或者往下走,最後到達 n,n 每達到一格,把該格仔的數取出來,該格仔的數就變成0,這樣一共走k次,現在要...

codevs1227 方格取數 2

題目鏈結 n n的方格,每個格仔中有乙個數,尋找從 1,1 走到 n,n 的k條路徑,使得取到的數的和最大。經典的費用流應用吧。額外新增源點s和匯點t,分別與 1,1 和 n,n 連邊。把棋盤中每個點拆成兩個,連兩條弧。其中一條容量為1,費用為該點的數字大小 另一條容量為inf,費用為0。這就表示乙...