方格取數加強版 題解

2022-07-15 06:15:11 字數 753 閱讀 1714

因為乙個點的貢獻只能算一次,把點拆成2個點即可,連一條流量為\(1\),費用為這個點的值,然後再連一條流量為\(+\infty\),費用為\(0\)的邊,接下來對於每個點向它下方和它右方的點連一條流量為\(+\infty\),費用為\(0\)的邊即可。算最大費用,邊權取反。

#include int n,k,s,t,mincost;

int a[111][111];

int head[1000000],tot=1;

struct edgee[1000000];

int dis[6600],vis[6600],flow[6600],pren[6600],pree[6600];

std::queueq;

int gn(int x,int y)

void add(int x,int y,int flow,int w);

head[x]=tot;

e[++tot]=;

head[y]=tot;

}bool spfa()

}} }

return dis[t]!=0x3f3f3f3f;

}void dinic() }}

main()

add(s,gn(1,1),k,0);

add(gn(n,n)+n*n,t,k,0);

n=t;

dinic();

printf("%d\n",mincost);

return 0;

}

方格取數加強版

給出乙個n n的矩陣,每一格有乙個非負整數aij,aij 1000 現在從 1,1 出發,可以往右或者往下走,最後到達 n,n 每達到一格,把該格仔的數取出來,該格仔的數就變成0,這樣一共走k次,現在要求k次所達到的方格的數的和最大 輸入格式 第一行兩個數n,k 1 n 50,0 k 10 接下來n...

luogu P2045 方格取數加強版

題目傳送門 題意 有乙個n n的矩陣,每乙個點都有對應的權值,現在你可以走k次,求你能獲得的最大價值。注意 每個點選完之後權值變為0。思路 最大費用最大流啊。1.因為只能選k次,所以開乙個超級源點和超級匯點,分別連向 1,1 和 n,n 流量為k。2.因為每個點的權值只能選一次,所以拆點。1 每乙個...

P2045 方格取數加強版

給出乙個n n的矩陣,每一格有乙個非負整數aij,aij 1000 現在從 1,1 出發,可以往右或者往下走,最後到達 n,n 每達到一格,把該格仔的數取出來,該格仔的數就變成0,這樣一共走k次,現在要求k次所達到的方格的數的和最大 輸入格式 第一行兩個數n,k 1 n 50,0 k 10 接下來n...