小美希望两个人吃的部分的美味度之和尽可能接近,请你输出
的最小值。(其中
代表小美吃的美味度,
代表小团吃的美味度)。
请务必保证,切下来的区域都是完整的,即不能把某个小正方形切成两个小区域。
第一行输出两个正整数和
,代表蛋糕区域的行数和列数。
接下来的行,每行输入
个正整数
,用来表示每个区域的美味度。
![]()
一个整数,代表的最小值。
2 3 1 1 4 5 1 4
0
把蛋糕像这样切开:
1 1 | 4
5 1 | 4
左边蛋糕美味度之和是8
右边蛋糕美味度之和是8
所以答案是0。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long ans = (long)9e18; int n = sc.nextInt(), m = sc.nextInt(); long[][] a = new long[n+5][m+5]; long[][] b = new long[n+5][m+5]; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { a[i][j] = sc.nextInt(); } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { b[i][j] = b[i-1][j] + b[i][j-1] - b[i-1][j-1] + a[i][j]; } } for (int i = 1; i <= n; i++) { ans = Math.min(ans, Math.abs(b[i][m] * 2 - b[n][m])); } for (int j = 1; j <= m; j++) { ans = Math.min(ans, Math.abs(b[n][j] * 2 - b[n][m])); } System.out.print(ans); } }