2011集訓隊出題 happiness

2021-08-14 03:34:35 字數 2060 閱讀 3799

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這三個位置。我們要通過最少的跳動把他們的位置移動...