记录编号 607118 评测结果 AAAAAAAAAA
题目名称 3113.[BZOJ 4676] Xor-Mul 棋盘 最终得分 100
用户昵称 Gravatar梦那边的美好ET 是否通过 通过
代码语言 C++ 运行时间 3.394 s
提交时间 2025-10-05 17:16:36 内存使用 4.24 MiB
显示代码纯文本
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#define ll long long
using namespace std;
const int maxn=10010,maxm=1<<5;
inline ll read(){
	int x=0,ju=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')ju=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
	return ju*x;
}
int n,m,cnt,a[maxn][5],b[maxn][5],el[maxn][5],ed[maxn][5];
int e[maxm],g[maxm],Log[maxm],cur[maxn];
ll f[2][maxm],ans;
int main(){
	freopen("chessboardd.in","r",stdin);
	freopen("chessboardd.out","w",stdout);
	n=read();m=read();
	for(int i=0;i<n;i++)for(int j=1;j<=m;j++)a[j][i]=read();
	for(int i=0;i<n;i++)for(int j=1;j<=m;j++)b[j][i]=read();
	for(int i=0;i<n;i++)for(int j=2;j<=m;j++)el[j][i]=read();
	for(int i=0;i<n;i++)for(int j=1;j<=m;j++)ed[j][i]=read();
	for(int i=0;i<n;i++)Log[1<<i]=i;
	for(int d=0;d<20;d++){
		memset(f[0],0,maxm*8);
		for(int l=1;l<=m;l++){
			int fl=l&1;
			memset(f[fl],0x3f,maxm*8);
			memset(e,0,sizeof(e));
			memset(g,0,sizeof(g));
			for(int i=0;i<(1<<n);i++)
			for(int k=0;k<n;k++){
				if(((i>>k)^(a[l][k]>>d))&1)g[i]+=b[l][k];
				if(((i>>k)^((i>>((k+1)%n))))&1)g[i]+=ed[l][k];
				if((i>>k)&1)e[i]+=el[l][k];
			}
			for(int i=0;i<(1<<n);i++)
			    for(int j=0;j<(1<<n);j++)
				    f[fl][i]=min(f[fl][i],f[fl^1][j]+g[i]+e[i^j]);
		}
		int fl=m&1;
		ll t=0x3f3f3f3f3f3f3f3fll;
		for(int i=0;i<(1<<n);i++)t=min(t,f[fl][i]);
		ans+=t<<d;
	}
	printf("%lld\n",ans);
	return 0;
}