/*
动态规划
有一个n*m大小的矩阵,其元素值为0或者1,求这个矩阵中全有1组成的最大方块其大小。
维数范围:(2<= n <= 50),m(2<= n <= 50)
代码如下:
*/
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
ifstream ifs("execute.stdin");
int iVal;
int index = 0, n, m; // 矩阵的行和列
int matrix[55][55]; // matrix[i][j]为右下顶点
while ( ifs >> iVal ) // 判断是否读完文件
{
if (index == 0) n = iVal;
if (index == 1) m = iVal;
else if(index > 1)
matrix[(index-2)/m][(index-2)%m] = iVal;
++index;
}
ifs.close();
int MaxSize = 0;
for (int i = 1; i < n; i++)
for (int j = 1; j < m; j++)
{
if (matrix[i][j] == 1)
{
int min = matrix[i-1][j-1];
if (min > matrix[i-1][j])
min = matrix[i-1][j];
if (min > matrix[i][j-1])
min = matrix[i][j-1];
matrix[i][j] = min + 1;
}
if (matrix[i][j] > MaxSize)
MaxSize = matrix[i][j];
}
cout << MaxSize << endl;
system("pause");
return 0;
}
【C++】动态规划
最新推荐文章于 2025-07-13 23:44:24 发布