一个4×4的矩阵,我们可以把矩阵看成内外两圈,我们可以把外圈按顺时钟或者逆时钟转动,每次转动一个格子。 我们想得到一个2×2的子矩阵,使得这个子矩阵4个元素的累加和最大。请问最大子矩阵的元素累加和是多少?
输入
第一行是一个整数T(1≤T≤1000),表示样例的个数。 每个样例占4行,每行4个整数,所有元素在[1,1000]范围内。
输出
每行输出一个样例的结果。
样例输入
2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 1 2 2 3 3 4 4 2 2 1 1 4 4 3 3
样例输出
56 15
提示
第一个样例,逆时钟旋转1格,得到最大子矩阵为
11 16 14 15
第二个样例,逆时钟旋转5格,得到最大子矩阵为
3 4 4 4
暴力解决
#include<stdio.h>
int arr[5][5];
int main()
{
int K;
scanf("%d",&K);
while(K--)
{
int i,j;
for(i=1;i<5;i++)//输入矩阵
{
for(j=1;j<5;j++)
{
scanf("%d",&arr[i][j]);
}
}
int max=0;
for(i=1;i<=12;i++)
{
int temp=arr[1][2];
arr[1][2]=arr[1][1];
arr[1][1]=arr[2][1];
arr[2][1]=arr[3][1];
arr[3][1]=arr[4][1];
arr[4][1]=arr[4][2];
arr[4][2]=arr[4][3];
arr[4][3]=arr[4][4];
arr[4][4]=arr[3][4];
arr[3][4]=arr[2][4];
arr[2][4]=arr[1][4];
arr[1][4]=arr[1][3];
arr[1][3]=temp;
int r1,r2,r3,r4,r5,r6,r7,r8,r9;
r1=arr[1][1]+arr[1][2]+arr[2][1]+arr[2][2];
r2=arr[1][2]+arr[1][3]+arr[2][2]+arr[2][3];
r3=arr[1][3]+arr[1][4]+arr[2][3]+arr[2][4];
r4=arr[2][1]+arr[2][2]+arr[3][1]+arr[3][2];
r5=arr[2][2]+arr[2][3]+arr[3][2]+arr[3][3];
r6=arr[2][3]+arr[2][4]+arr[3][3]+arr[3][4];
r7=arr[3][1]+arr[3][2]+arr[4][1]+arr[4][2];
r8=arr[3][2]+arr[3][3]+arr[4][2]+arr[4][3];
r9=arr[3][3]+arr[3][4]+arr[4][3]+arr[4][4];
if(r1>max)//注意全部用if elseif只有当上一个条件不满足时才会进入
max=r1;
if(r2>max)
max=r2;
if(r3>max)
max=r3;
if(r4>max)
max=r4;
if(r5>max)
max=r5;
if(r6>max)
max=r6;
if(r7>max)
max=r7;
if(r8>max)
max=r8;
if(r8>max)
max=r8;
if(r9>max)
max=r9;
}
printf("%d\n",max);
}
return 0;
}