算是一道模拟题吧
要注意加减就行了,可是我搞错了,wa了11次,嘿嘿,粗心啊。。。
#include <stdio.h> #include <string.h> #define maxn 30 int n , m , pos[maxn][maxn] , ans[maxn][maxn]; int dx[] = {1,0,-1,0}; int dy[] = {0,1,0,-1}; int _x,_y,_max; void init(){ _max = -10001; for(int i=0;i<=25;i++){ for(int j=0;j<=25;j++){ ans[i][j] = -10001; } } } int sco(int x,int y){ int res =0 ; for(int i=0;i<4;i++){ int nx = x + dx[i] , ny = y + dy[i]; if(nx<1 || nx>n || ny<1 || ny>m) continue; if(pos[x][y] > 0) res -= pos[nx][ny]; else res += pos[nx][ny]; } return res; } void dp() { init(); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ ans[i][j] = sco(i,j); //printf("%d ",ans[i][j]); if(ans[i][j] > _max){ _max = ans[i][j]; _x = i , _y = j; } } //printf(" "); } } int main() { while(~scanf("%d %d",&n,&m) , n&&m) { for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ scanf("%d",&pos[i][j]); } } dp(); printf("%d %d %d ",_x,_y,_max); } return 0; }