题目描述
高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友。这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文科或者理科,那么他们又将收获一些喜悦值。
作为计算机竞赛教练的scp大老板,想知道如何分配可以使得全班的喜悦值总和最大。
输入输出格式
输入格式: 第一行两个正整数n,m。
接下来是六个矩阵
此矩阵的第i行第j列的数字表示座位在第i行第j列的同学选择文科获得的喜悦值。
此矩阵的第i行第j列的数字表示座位在第i行第j列的同学选择理科获得的喜悦值。
此矩阵的第i行第j列的数字表示座位在第i行第j列的同学与第i+1行第j列的同学同时选择文科获得的额外喜悦值。
此矩阵的第i行第j列的数字表示座位在第i行第j列的同学与第i+1行第j列的同学同时选择理科获得的额外喜悦值。
此矩阵的第i行第j列的数字表示座位在第i行第j列的同学与第i行第j+1列的同学同时选择文科获得的额外喜悦值。
此矩阵的第i行第j列的数字表示座位在第i行第j列的同学与第i行第j+1列的同学同时选择理科获得的额外喜悦值。
输出格式: 输出一个整数,表示喜悦值总和的最大值
输入输出样例
输入样例#1: 1 21 1100 11011000
说明
【样例说明】
两人都选理,则获得100+110+1000的喜悦值。
对于100%以内的数据,n,m<=100 所有喜悦值均为小于等于5000的非负整数
考虑最小割:
用 st 表示源点---文科,ed 表示 汇点 --- 理科;
其中 A,B 为有关联的两个点;
考虑建边:
st--->A : A文+AB文/2,st--->B:B文+AB文/2;
A--->ed: A理+AB理/2,B--->ed:B理+AB理/2;
A<--->B:AB理/2+AB文/2;
枚举最小割我们可以发现所有可能的情况都满足了;
要使得高兴值最大,那么最小割最小;
跑一边 dinic即可;
#include #include #include #include #include #include #include #include