C11ROOKS - Hai quân xe

Tác giả: flashmt

Ngôn ngữ: C++

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;

int n,a[333][333],row[333],col[333],ans;

int main()
{
	cin >> n;
	for (int i=1;i<=n;i++)
		for (int j=1;j<=n;j++)
			scanf("%d",a[i]+j), row[i]+=a[i][j], col[j]+=a[i][j];
	for (int i=1;i<n;i++)
		for (int j=i+1;j<=n;j++)
		{
			int mxI=-(1<<29),mxJ=mxI;
			for (int k=1;k<=n;k++)
			{
				int vI=col[k]-a[i][k]*2-a[j][k];
				int vJ=col[k]-a[i][k]-a[j][k]*2;
				ans=max(ans,row[i]+row[j]+mxI+vJ);
				ans=max(ans,row[i]+row[j]+mxJ+vI);
				ans=max(ans,row[i]+row[j]+col[k]-a[i][k]*2-a[j][k]*2);
				ans=max(ans,col[i]+col[j]+row[k]-a[k][i]*2-a[k][j]*2);
				mxJ=max(mxJ,vJ);
				mxI=max(mxI,vI);
			}
		}
		
	cout << ans << endl;
}

Download