在乙個n*m的數字矩陣中取數,取得數不能相鄰,求能取到的最大價值。
最大價值,那麼反著去想,就是取若干個格仔,讓所有格仔的都不相鄰,要求權最小,那麼就是最小割問題。然後二分建圖。起點與奇數點連容量為該點價值的邊,偶數點與終點連容量為該點價值的邊,然後相鄰的連一條容量無限的邊,這樣就不會割去這條邊,然後所有的權值和減去最小割就是答案。
#include
#include
#include
#include
#include
using
namespace
std;
const
int dx[4]=,dy[4]=;
struct linea[200001];
queue
f;//佇列
int n,d[10055],s,e,m,answ,w,tot,ls[10055];
void addl(int x,int y,int z)//加邊
bool bfs()//在殘量網上建分層圖
}f.pop();
}if (d[e]) return
true;
else
return
false;
}int dinic(int x,int flow)//求最大流
}if (!rest) d[x]=0;
return rest;
}int ansq()
int main()
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if ((i+j)&1)
}printf("%d",answ-ansq());//輸出
}
P2774 方格取數問題(網路流)
p2774 方格取數問題 emm.仔細一看,這不是最大權閉合子圖的題嗎!取乙個點 x,y 限制條件是同時取 x,y 1 x,y 1 x 1,y x 1,y 只不過權值取負而已 於是我們把圖分為黑點和白點,同顏色點之間不相鄰,不同顏色的點相鄰 如將 x y 2 1 的點記為黑點 假裝把白點的權值都看成...
P2774 方格取數問題
題目描述 在乙個有 m n 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任意 2 個數所在方格沒有公共邊,且取出的數的總和最大。試設計乙個滿足要求的取數演算法。對於給定的方格棋盤,按照取數要求程式設計找出總和最大的數。輸入格式 第 1 行有 2 個正整數 m 和 n,分別表示棋盤的行...
P2774 方格取數問題
none 在乙個有 m n 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任意 2 個數所在方格沒有公共邊,且取出的數的總和最大。試設計乙個滿足要求的取數演算法。對於給定的方格棋盤,按照取數要求程式設計找出總和最大的數。輸入格式 第 1 行有 2 個正整數 m 和 n,分別表示棋盤的行...