Vijos1057. 盖房子
来源:互联网 发布:手机淘宝 编辑:程序博客网 时间:2024/04/28 19:07
试题请参见: https://vijos.org/p/1057
题目概述
永恒の灵魂最近得到了面积为n*m的一大块土地(高兴ING^_^), 他想在这块土地上建造一所房子, 这个房子必须是正方形的.
但是, 这块土地并非十全十美, 上面有很多不平坦的地方(也可以叫瑕疵). 这些瑕疵十分恶心, 以至于根本不能在上面盖一砖一瓦.
他希望找到一块最大的正方形无瑕疵土地来盖房子.
不过, 这并不是什么难题, 永恒の灵魂在10分钟内就轻松解决了这个问题.
现在, 您也来试试吧.
但是, 这块土地并非十全十美, 上面有很多不平坦的地方(也可以叫瑕疵). 这些瑕疵十分恶心, 以至于根本不能在上面盖一砖一瓦.
他希望找到一块最大的正方形无瑕疵土地来盖房子.
不过, 这并不是什么难题, 永恒の灵魂在10分钟内就轻松解决了这个问题.
现在, 您也来试试吧.
输入
输入文件第一行为两个整数n, m(1<=n,m<=1000), 接下来n行, 每行m个数字, 用空格隔开. 0表示该块土地有瑕疵, 1表示该块土地完好.
输出
一个整数, 最大正方形的边长.
解题思路
1. 典型的动态规划
2. 状态转移方程: 对于每一个正方形的右下角fields[i][j], sequare[i][j] = min{ sequare[i - 1][j - 1], sequare[i - 1][j], sequare[i][j - 1] } + 1
遇到的问题
1. 直接在栈内分配数组空间直接Runtime Error, 因为栈的空间只有1M(或4M)
2. 这次我吸取了上次的教训, 谨防数组越界, 于是将第0行和第0列的空间预留出来
源代码
#include <iostream>#include <fstream>int min(int x, int y, int z) { int minValue = x; if ( minValue > y ) { minValue = y; } if ( minValue > z ) { minValue = z; } return minValue;}int main() { using std::cin; // std::ifstream cin; // cin.open("input.txt"); const int SIZE = 1001; int n = 0, m = 0; bool** fields = new bool*[SIZE]; int** sequare = new int*[SIZE]; // Initialize for ( int i = 0; i < SIZE; ++ i ) { fields[i] = new bool[SIZE](); } for ( int i = 0; i < SIZE; ++ i ) { sequare[i] = new int[SIZE](); } // Input cin >> n >> m; for ( int i = 1; i <= n; ++ i ) { for ( int j = 1; j <= m; ++ j ) { cin >> fields[i][j]; } } // Processing int maxSequare = 0; for ( int i = 1; i <= n; ++ i ) { for ( int j = 1; j <= m; ++ j ) { if ( fields[i][j] ) { sequare[i][j] = min(sequare[i - 1][j - 1], sequare[i - 1][j], sequare[i][j - 1]) + 1; if ( sequare[i][j] > maxSequare ) { maxSequare = sequare[i][j]; } } } } // Output std::cout << maxSequare << std::endl; // Recycling for ( int i = 0; i < SIZE; ++ i ) { delete[] fields[i]; } delete[] fields; for ( int i = 0; i < SIZE; ++ i ) { delete[] sequare[i]; } delete[] sequare; return 0;}
0 0
- Vijos1057. 盖房子
- [Vijos1057] 盖房子
- [vijos1057]盖房子
- 盖房子
- 盖房子
- 盖房子
- vijos1057
- JS小游戏 - 盖房子
- 盖房子_DP
- P1057 盖房子
- 盖房子优化1
- 盖房子优化2
- 盖房子优化3
- CSU 1813 盖房子
- 1057.盖房子
- vijos 1057 盖房子
- CillyB盖房子
- [BZOJ1515]盖房子
- 重头再来之项目练手-JAVA简易计算器
- Bellman算法PKU 3259
- 动态NORMALMAP的拓扑微分性质
- bzoj2154: Crash的数字表格/2693: jzptab [莫比乌斯反演、数论推导]
- 浏览器内核分类
- Vijos1057. 盖房子
- MAPublisher9.5快速开始指南 第8章 图例和比例尺条
- 浏览器输入网址后台是如何运作的
- Java 键盘输入相关操作(复习笔记)
- ensemble技术在weka中的实现过程
- Hackerran Manasa and Stones
- 红外遥控对单片机的控制(测试成功)
- 为什么Java里的Arrays.asList不能用add和remove方法?
- 转 Conversion to Dalvik format failed: Unable to execute dex: java.nio.BufferOverflowException.