Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <vector>
- using namespace std;
- int main() {
- int n, m;
- cin >> n >> m;
- vector<vector<int>> array(n, vector<int>(m, 0));
- for (int i = 0; i < n; i++)
- for (int j = 0; j < m; j++) {
- cin >> array[i][j];
- if (array[i][j] == 0)
- array[i][j] = -1000;
- }
- int ans = 0x80000000;
- for (int i = 0; i < n; i++) {
- vector<int> dp(m, 0);
- // 壓縮二維陣列(把 i ~ n 的陣列壓成一維)
- // 就可以當作最大連續和(一維)問題計算
- for (int j = i; j < n; j++) {
- int sum_now = 0;
- for (int k = 0; k < m; k++) {
- dp[k] += array[j][k];
- // 當前和 >=0,那就試著加入下一個
- if (sum_now >= 0)
- sum_now += dp[k];
- // 當前和<0,那就當作第一個重新開始
- else
- sum_now = dp[k];
- ans = max(sum_now, ans);
- }
- }
- }
- cout << max(ans, 0) << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement