AOJ0098 Maximum Sum Sequence II
問題リンク Maximum Sum Sequence II
- 解法
よくある総和の問題です。
(1, 1)-(i, j)の部分行列の総和S[i][j]を前計算しておくと、
(y, x)-(i, j)は
S[i][j] - S[y-1][j] - S[i][x-1] + S[y-1][x-1]
で求められます。
- ソース
import java.util.Scanner; //Maximum Sum Sequence II public class AOJ0098 { void run(){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] a = new int[n+1][n+1]; for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){ int x = sc.nextInt(); a[i][j] = a[i-1][j] + a[i][j-1] - a[i-1][j-1] + x; } int res = Integer.MIN_VALUE; for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)for(int y=1;y<=i;y++)for(int x=1;x<=j;x++)res=Math.max(res, a[i][j]-a[y-1][j]-a[i][x-1]+a[y-1][x-1]); System.out.println(res); } public static void main(String[] args) { new AOJ0098().run(); } }