题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4708
AC代码:
#include<stdio.h>
int a[20][20];
int main(){
int N,i,j;
while(~scanf("%d",&N),N){
for(i=1;i<=N;i++){
for(j=1;j<=N;j++){
scanf("%d",&a[i][j]);
}
}
int Tans=0;
int Tstep=0;
for(i=1;i<=N/2;i++){
int ans=-0x7f7f7f;
int step;
for(j=i;j<=N-i;j++){
int temp=a[i][j];
temp+=a[j][N-i+1];
temp+=a[N-i+1][N-j+1];
temp+=a[N-j+1][i];
if(temp>ans){
ans=temp;
step=j-i;
}else if(temp==ans&&step>j-i){
step=j-i;
}
}
for(j=i;j<=N-i;j++){
int temp=a[i][j];
temp+=a[j][N-i+1];
temp+=a[N-i+1][N-j+1];
temp+=a[N-j+1][i];
if(temp==ans&&step>N-i+1-j){
step=N-i+1-j;
}
}
Tans+=ans;
Tstep+=step;
}
Tans+=a[N/2+1][N/2+1];
printf("%d %d\n",Tans,Tstep);
}
return 0;
}
WA代码:
主要是当值相同的时候的情况没有考虑到,值相同的时候可能会有步数不同的情况没有考虑到:
#include<stdio.h>
int a[20][20];
int main(){
int N,i,j;
while(~scanf("%d",&N),N){
for(i=1;i<=N;i++){
for(j=1;j<=N;j++){
scanf("%d",&a[i][j]);
}
}
int Tans=0;
int Tstep=0;
for(i=1;i<=N/2;i++){
int ans=-0x7f7f7f;
int step;
for(j=i;j<=N-i;j++){
int temp=a[i][j];
temp+=a[j][N-i+1];
temp+=a[N-i+1][N-j+1];
temp+=a[N-j+1][i];
if(temp>=ans){
ans=temp;
step=j;
}
}
Tans+=ans;
if(step-i>N-i+1-step) Tstep+=N-i+1-step;
else Tstep+=step-i;
}
Tans+=a[N/2+1][N/2+1];
printf("%d %d\n",Tans,Tstep);
}
return 0;
}