From 1361d24d871f0288b5cdb706a302a4c96ed7282e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Mon, 18 Dec 2023 14:43:50 +0800 Subject: [PATCH] 'commit' --- TangDou/Topic/PrefixAndSuffix/P1719_2.cpp | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/TangDou/Topic/PrefixAndSuffix/P1719_2.cpp b/TangDou/Topic/PrefixAndSuffix/P1719_2.cpp index c21836a..105fa80 100644 --- a/TangDou/Topic/PrefixAndSuffix/P1719_2.cpp +++ b/TangDou/Topic/PrefixAndSuffix/P1719_2.cpp @@ -3,29 +3,26 @@ using namespace std; const int N = 330; int n; -int a[N][N], dp[N]; +int a[N][N], s[N][N], dp[N]; int res = INT_MIN; int main() { cin >> n; // 前缀和(竖直方向) - for (int i = 1; i <= n; i++) { + for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) { cin >> a[i][j]; - a[i][j] += a[i - 1][j]; + s[i][j] = s[i - 1][j] + a[i][j]; // 一维前缀和,这可不是二维前缀和 } - } + // 降维变成一维dp - for (int i = 0; i <= n - 1; i++) { - for (int j = i + 1; j <= n; j++) { + for (int i = 0; i <= n - 1; i++) // 枚举左上角 + for (int j = i + 1; j <= n; j++) // 枚举右下角 for (int k = 1; k <= n; k++) { - dp[k] = max(a[j][k] - a[i][k], dp[k - 1] + a[j][k] - a[i][k]); + dp[k] = max(s[j][k] - s[i][k], dp[k - 1] + s[j][k] - s[i][k]); res = max(res, dp[k]); } - } - } - - cout << res; - + // 输出 + cout << res << endl; return 0; }