#include <iostream> #include <stack> #include <vector> using namespace std; int largestRectangleArea(vector<int>& heights) { stack<int> s; int maxArea = 0; int n = heights.size(); for (int i = 0; i <= n; i++) { while (!s.empty() && (i == n || heights[s.top()] >= heights[i])) { int height = heights[s.top()]; s.pop(); int width = s.empty() ? i : i - s.top() - 1; maxArea = max(maxArea, height * width); } s.push(i); } return maxArea; } int main() { vector<int> heights = {1, 1, 1, 1, 1, 1, 1, 1}; cout << largestRectangleArea(heights) << endl; return 0; }手动输入矩阵
时间: 2023-11-22 18:55:55 浏览: 67
抱歉,这段代码是计算给定柱状图中最大矩形面积的程序,并不需要手动输入矩阵。如果您想要编写手动输入矩阵的程序,可以参考以下示例代码:
```
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
cout << "请输入矩阵的行数和列数: ";
cin >> n >> m;
vector<vector<int>> matrix(n, vector<int>(m));
cout << "请输入矩阵元素: " << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> matrix[i][j];
}
}
cout << "您输入的矩阵是: " << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
通过该程序,您可以输入矩阵的行数和列数,并手动输入矩阵的元素,最终输出您输入的矩阵。
相关问题
#include <iostream> #include<vector> #include<algorithm> #include <stack> using namespace std; class Solution{ public: int maximalRectangle(vector<vector<char> >& matrix){ int m = matrix.size(),n = matrix[0].size(); vector<int> heights(n); int res = 0; for(int i = 0; i < m ; i++){ for(int j = 0; j < n;j++){ if(matrix[i][j] == '1') heights[j]++; else heights[j] = 0; } res = max(res,maxArea(heights)); } return res; } int maxArea(vector<int>& heights){ stack<int> stk; int res = 0; heights.push_back(-1); for(int i=0; i < heights.size(); i++){ while(!stk.empty() && heights[i] < heights[stk.top()]){ int idx = stk.top(); stk.pop(); int left = stk.empty()?-1:stk.top(); res =max(res,(i-left-1)*heights[idx]); } stk.push(i); } heights.pop_back( ); return res; } }; int main() { Solution solution; int m,n; cout<<"请输入矩形的行数和列数:"; cin>>m>>n; vector<vector<char> > matrix(m,vector<char>(n)); cout<<"请输入矩形元素(0或1):"<<endl; for(int i=0;i<m;i++){ for(int j=0;j<n;j++) { cin>>matrix[i][j]; } } int maxArea = solution.maximalRectangle(matrix); cout<<"矩形中最大的矩形面积是:"<<maxArea<<endl; return 0; }此代码用到了动态规划吗
这段代码没有直接使用动态规划。它使用了栈来解决最大矩形面积的问题。具体来说,它使用了单调栈算法来找到每个柱子的左右边界,然后计算出以该柱子为高度的矩形的面积。这个过程在循环中进行,每次计算出一个矩形的面积后与当前最大面积进行比较更新。因此,这个问题可以看作是在一维数组中找到最大矩形面积的问题,而不是动态规划。
改为手动输入矩阵int main() { vector<int> heights = {1, 1, 1, 1, 1, 1, 1, 1}; cout << largestRectangleArea(heights) << endl; return 0;
好的,那么手动输入矩阵的代码如下:
```
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
int largestRectangleArea(vector<int>& heights) {
int n = heights.size();
vector<int> left(n), right(n);
stack<int> s;
for (int i = 0; i < n; i++) {
while (!s.empty() && heights[s.top()] >= heights[i]) {
s.pop();
}
left[i] = s.empty() ? -1 : s.top();
s.push(i);
}
while (!s.empty()) {
s.pop();
}
for (int i = n - 1; i >= 0; i--) {
while (!s.empty() && heights[s.top()] >= heights[i]) {
s.pop();
}
right[i] = s.empty() ? n : s.top();
s.push(i);
}
int ans = 0;
for (int i = 0; i < n; i++) {
ans = max(ans, (right[i] - left[i] - 1) * heights[i]);
}
return ans;
}
int main() {
vector<int> heights = {1, 1, 1, 1, 1, 1, 1, 1};
cout << largestRectangleArea(heights) << endl;
return 0;
}
```
输出结果为 8,因为所有柱子的高度都是 1,所以最大矩形面积为 $1 \times 8 = 8$。
阅读全文