package main import . "fmt" func main() { var h, w int Scan(&h, &w) grid := make([][]int, h+2) for i := range grid { grid[i] = make([]int, w+2) } for i := 1; i <= h; i++ { for j := 1; j <= w; j++ { Scan(&grid[i][j]) } } type Pos struct { row, col int } beams := [][]*Pos{} for i := 1; i <= h; i++ { b := []*Pos{} for j := 1; j <= w; j++{ b = append(b, &Pos{i, j}) } beams = append(beams, b) } for j := 1; j <= w; j++ { b := []*Pos{} for i := 1; i <= h; i++ { b = append(b, &Pos{i, j}) } beams = append(beams, b) } for i := 1; i <= h; i++ { b := []*Pos{} for j := 1; j <= w&& i+j-1 <= h; j++ { b = append(b, &Pos{ i+j-1, j}) } beams = append(beams, b) } for i := 1; i <= h; i++ { b := []*Pos{} for j := 1; j <= w && i-j+1 >= 1; j++ { b = append(b, &Pos{ i-j+1, j}) } beams = append(beams, b) } for j := 1; j <= w; j++ { b := []*Pos{} for i := 1; i <= h && j+i-1 <= w; i++ { b = append(b, &Pos{ i, j+i-1 }) } beams = append(beams, b) } for j := 1; j <= w; j++ { b := []*Pos{} for i := h; i >= 1 && j+h-i <= w; i-- { b = append(b, &Pos{ i, j+h-i }) } beams = append(beams, b) } var ans int for i, beam1 := range beams { score1 := 0 broken := map[int]bool{} for _, p := range beam1 { score1 += grid[p.row][p.col] broken[p.row*(w+2)+p.col] = true } for _, beam2 := range beams[i+1:] { score := score1 for _, p := range beam2 { if !broken[p.row*(w+2)+p.col] { score += grid[p.row][p.col] } } ans = max(ans, score) } } Println(ans) }