Skip to content

Commit 3c2a913

Browse files
added DP solution to max grid problem.
1 parent 5333a9f commit 3c2a913

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#include <iostream>
2+
#include <bits/stdc++.h>
3+
4+
typedef long long ll;
5+
6+
using namespace std;
7+
8+
// DP, Kadane's Algorithm
9+
10+
int MaxSumSubArray(vector<int> &list)
11+
{
12+
int n = list.size();
13+
int sumNow = 0;
14+
int maxSum = INT16_MIN;
15+
for (int i = 0; i < n; i++)
16+
{
17+
sumNow = sumNow + list[i];
18+
if (sumNow < 0)
19+
sumNow = 0;
20+
if (maxSum < sumNow)
21+
maxSum = sumNow;
22+
}
23+
for (int i = 0; i < n; i++)
24+
{
25+
if (list[i] > maxSum)
26+
maxSum = list[i];
27+
}
28+
return maxSum;
29+
}
30+
31+
int main()
32+
{
33+
int n, m;
34+
cin >> n >> m;
35+
vector<vector<int>> matrix(n, vector<int>(m, 0));
36+
// taking input
37+
for (int i = 0; i < n; i++)
38+
{
39+
for (int j = 0; j < m; j++)
40+
{
41+
int num;
42+
cin >> num;
43+
matrix[i][j] = num;
44+
}
45+
}
46+
int maxGridSum = 0;
47+
// making DP array
48+
// appending first column to it
49+
vector<int> DP(n, 0);
50+
// configuring L and R for grids
51+
for (int i = 0; i < m; i++)
52+
{
53+
DP.assign(n, 0);
54+
for (int j = i; j < m; j++)
55+
{
56+
for (int k = 0; k < n; k++)
57+
{
58+
DP[k] += matrix[k][j];
59+
}
60+
int calculate = MaxSumSubArray(DP);
61+
cout << "sum at : " << i << " and " << j << " : " << calculate << endl;
62+
if (calculate > maxGridSum)
63+
maxGridSum = calculate;
64+
}
65+
}
66+
// vector<int> arr{1, -4, 2, -9, 2};
67+
cout << maxGridSum << endl;
68+
return 0;
69+
}

0 commit comments

Comments
 (0)