#include
#include
#include
#define NOT_EXIST -1
int* createGarden(size_t n);
void destroyGarden(int*g);
int getHeight(const int*g , size_t n,size_t row , size_t col);
void setHeight(int*g , size_t n,size_t row , size_t col , int h);
int main()
{
size_t n;
size_t i,j;
int sh = INT_MAX;
int origin_sum=0;
scanf("%d",&n); //输入n
int*g = createGarden(n) ; //创建花圃二维矩阵
for(i=0;i {
scanf("%d",g+i);
origin_sum+=g[i]; //求花圃原来总的高度。
}
for(i=0;i {
for(j=0;j {
if( i!=j && i+j!=(n-1) ) //如果不是对角线上的点
{
//这里面可以不执行任何操作。下面的代码是多余的
// setHeight(g,n,i,j,NOT_EXIST); //正对角线规律: row == col
//反对角线规律 row+ col == n-1
//printf("(i=%d,j=%d)\n",i,j);
}
else //在对角线上找最矮的。
{
if(sh > getHeight(g,n,i,j))
{
sh = getHeight(g,n,i,j);
}
}
}
}
//(总的高度-剩余的高度合 )* 2
printf("%d\n",(origin_sum -(2*n-1)*sh )*2);
destroyGarden(g);
return 0;
}
int* createGarden(size_t n)
{
int*garden = (int*)malloc(sizeof(int)*n*n);
return garden;
}
void destroyGarden(int*g)
{
free(g);
}
int getHeight(const int*g , size_t n,size_t row , size_t col)
{
return g[ row*n + col ];
}
void setHeight(int*g , size_t n,size_t row , size_t col , int h)
{
g[ row*n + col ] = h;
}