d206: 108-Maximum Sum

出處http://zerojudge.tw/ShowProblem?problemid=d206

內容 :

給你一個 N*N 的陣列,請你找出有最大和的子區域 (sub-rectangle)其和為多少。一個區域的和指的是該區域中所有元素值的和。一個區域是指相連的任意大小的子陣列。範例:

0 -2 -7 0

9 2 -6 2

-4 1 -4 1

-1 8 0 -2

最大子區域:

9 2

-4 1

-1 8

→15

輸入說明 :

有一個正整數N(N<=100)。從下一列起會有N2個數字。EOF結束。

輸出說明 :

輸出最大子區域的值。

範例輸入 :

4

0 -2 -7 0 9 2

-6 2 -4

1 -4 1 -1 8 0

-2 10 9 116 24 -121 30 14 2 119 122 28 -53 125 -71 87 -57 42 -111 125

-33 91 -121 30 -28 1 -16 97 -11 68 -24 103 -126 98 -61 33 48 109

-88 67 -72 77 -107 95 -78 23 -86 45 -4 28 -121 73 -57 20 -122 9

68 -97 79 -68 122 -42 88 -22 0 -116 55 -44 68 -109 43 -32 103 -54

122 -41 62 -114 113 -32 29 -22 99 -11 38 -60 88 -83 28 -83 122 -56

100 -86 63 -49 111 -77 91 -88 69 -110

範例輸出 :

15

963

提示 :

出處 :

ACM 108 (管理:asas)

解題策略

首先計算出從座標(0,0)到 (i,j)的和到sum[i][j],利用sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];

在找出座標(m,n),與所有x小於m與y小於n的長方形和的最大值,利用sum[m][k]-sum[m][k-j-1]-sum[m-i-1][k]+sum[m-i-1][k-j-1]