在一个只有0和1组成的矩阵中,手动输入矩阵,输出最大的由1组成矩形面积C/C++语言
时间: 2023-07-16 16:14:53 浏览: 80
C语言程序设计-在键盘上输入一个3行3列矩阵的各个元素的值(值为整数),然后输出主对角线元素的平方和
5星 · 资源好评率100%
以下是C++代码实现:
```c++
#include<iostream>
#include<stack>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
int a[1005][1005];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> a[i][j];
int ans = 0;
for (int i = 1; i <= n; i++)
{
int sum[m + 1] = { 0 };
for (int j = i; j <= n; j++)
{
stack<int> st;
st.push(0);
int s = 0;
for (int k = 1; k <= m; k++)
{
sum[k] += a[j][k];
while (sum[st.top()] > sum[k])
{
int h = sum[st.top()];
st.pop();
s = h * (k - st.top() - 1);
if (s > ans) ans = s;
}
st.push(k);
}
while (!st.empty()) st.pop();
}
}
cout << ans << endl;
return 0;
}
```
算法思路:使用单调栈来维护每列的高度,求出以当前列为右边界的最大矩形面积,循环处理所有可能的左边界和右边界,记录最大值即为答案。
阅读全文