description
高一一班的座位表是個n*m的矩陣,經過乙個學期的相處,每個同學和前後左右相鄰的同學互相成為了好朋友。這學期要分文理科了,每個同學對於選擇文科與理科有著自己的喜悅值,而一對好朋友如果能同時選文科或者理科,那麼他們又將收穫一些喜悅值。
作為計算機競賽教練的scp大老闆,想知道如何分配可以使得全班的喜悅值總和最大。
input
第一行兩個正整數n,m。
接下來是六個矩陣
第乙個矩陣為n行m列 此矩陣的第i行第j列的數字表示座位在第i行第j列的同學選擇文科獲得的喜悅值。
第二個矩陣為n行m列 此矩陣的第i行第j列的數字表示座位在第i行第j列的同學選擇理科獲得的喜悅值。
第三個矩陣為n-1行m列 此矩陣的第i行第j列的數字表示座位在第i行第j列的同學與第i+1行第j列的同學同時選擇文科獲得的額外喜悅值。
第四個矩陣為n-1行m列 此矩陣的第i行第j列的數字表示座位在第i行第j列的同學與第i+1行第j列的同學同時選擇理科獲得的額外喜悅值。
第五個矩陣為n行m-1列 此矩陣的第i行第j列的數字表示座位在第i行第j列的同學與第i行第j+1列的同學同時選擇文科獲得的額外喜悅值。
第六個矩陣為n行m-1列 此矩陣的第i行第j列的數字表示座位在第i行第j列的同學與第i行第j+1列的同學同時選擇理科獲得的額外喜悅值。
output
輸出乙個整數,表示喜悅值總和的最大值
sample input
1 2
1 1
100 110
1 1000
sample output
data constraint
hint
【樣例說明】
兩人都選理,則獲得100+110+1000的喜悅值。
【資料規模】
對於10%以內的資料,n,m<=4
對於30%以內的資料,n,m<=8
對於100%以內的資料,n,m<=100 所有喜悅值均為小於等於5000的非負整數
這是一道二元關係的題目
這一道題目要求的是最大值,所以我們不妨用所有值的和減去最小割
然後就列出一堆式子然後解方程
具體的就不說了
其中有乙個比較坑的地方,就是其實是沒有確定解的以為方程不夠,但是我們考慮到比如x和s的連邊和y選文選理沒有關係,這樣就可以解出來我們想要的那個解了
然後跑一波最大流就好了
#include
#include
#include
#include
#include
#define fo(i,a,b) for(i=a;i<=b;i++)
using
namespace
std;
const
int maxn=1e5+5;
int fi[maxn],ne[maxn*2],dui[maxn*2],dui1[maxn*2],qc[maxn];
int mt[maxn],a[105][105][8],p[105][105];
int h[maxn],de[10010];
int i,j,k,l,m,n,x,y,tot,ans,now,cp,c1,c2;
void add(int x,int y,int z)
bool bfs()
k=ne[k];}}
if (de[cp+2]==-1) return
false; else
return
true;
}int dinic(int x,int w)
}i=ne[i];
}return now;
}int main()
now=1;
fo(i,3,n) fo(j,2,m)
if (j!=m)
}while (bfs())
printf("%d\n",(tot-ans)/2);
return
0;}
2011集訓隊出題 happiness
高一一班的座位表是個n m的矩陣,經過乙個學期的相處,每個同學和前後左右相鄰的同學互相成為了好朋友。這學期要分文理科了,每個同學對於選擇文科與理科有著自己的喜悅值,而一對好朋友如果能同時選文科或者理科,那麼他們又將收穫一些喜悅值。作為計算機競賽教練的scp大老闆,想知道如何分配可以使得全班的喜悅值總...
2011集訓隊出題 拆遷隊
lanxisi帶領著他的拆遷隊來整治乙個街道。這個街道由n個舊房子組成,從左到右編號為1.n。每個舊房子i有乙個正整數的美觀度ai。lanxisi希望整個街道從左到右美觀度嚴格遞增,也就是保證ai i。但是舊的街道明顯不符合這個要求,於是lanxisi希望拆遷一些舊房子並在原地建立新房子來滿足這一要...
2011集訓隊出題 跳跳棋
time limits 1000 ms memory limits 128000 kb description 跳跳棋是在一條數軸上進行的。棋子只能擺在整點上。每個點不能擺超過乙個棋子。我們用跳跳棋來做乙個簡單的遊戲 棋盤上有3顆棋子,分別在a,b,c這三個位置。我們要通過最少的跳動把他們的位置移動...