盖房子(house)

盖房子(house)

题目描述

FJ最近得到了面积为n*m的一大块土地,他想在这块土地上建造一所房子,这个房子必须膏形的。但是,这块土地并非十全十美,上面有很多不平坦的地方(也可以叫瑕疵)。这些瑕疵十分以至于根本不能在上面盖一砖一瓦。他希望找到一块最大的正方形无瑕疵土地来盖房子。不过,不是什么难题,FJ在10分钟内就轻松解决了这个问题。
现在,您也来试试吧。

输入

第1行为两个整数n,m(1≤n,m≤100)。接下来n行,每行m个数字,用空格隔开。0表萄土地有瑕疵,1表示该块土地完好。

输出

一个整数,最大正方形的边长。

样例输入

4 4
0 1 1 1
1 1 1 0
0 1 1 0
1 1 0 1

样例输出

2分析:坐标为(i,j)长度为k的正方形的充分必要条件是坐标(i-1,j),(i,j-1),(i-1,j-1)长度为k-1的正方形并且点(i,j)为1同时成立代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <climits>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <list>
#include <ext/rope>
#define rep(i,m,n) for(i=m;i<=n;i++)
#define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
#define vi vector<int>
#define pii pair<int,int>
#define mod 1000000007
#define inf 0x3f3f3f3f
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define ll long long
#define pi acos(-1.0)
const int maxn=2e5+10;
const int dis[4][2]={{0,1},{-1,0},{0,-1},{1,0}};
using namespace std;
using namespace __gnu_cxx;
ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}
ll qpow(ll p,ll q){ll f=1;while(q){if(q&1)f=f*p;p=p*p;q>>=1;}return f;}
int n,m,dp[101][101][101],a[101][101],ma;
int main()
{
    int i,j,k,t;
    scanf("%d%d",&n,&m);
    ma=0;
    rep(i,0,100)rep(j,0,100)dp[j][i][0]=1;
    rep(i,1,n)rep(j,1,m)scanf("%d",&a[i][j]);
    rep(i,1,n)rep(j,1,m)rep(k,1,min(i,j))
    {
        if(dp[i-1][j][k-1]&&dp[i][j-1][k-1]&&dp[i-1][j-1][k-1]&&a[i][j]==1)
        dp[i][j][k]=1,ma=max(ma,k);
    }
    printf("%d\n",ma);
    //system ("pause");
    return 0;
}
 
时间: 2024-08-26 19:47:27

盖房子(house)的相关文章

Vijos 1057 盖房子

二次联通门 : Vijos 1057 盖房子 /* Vijos 1057 盖房子 简单的dp 当前点(i, j)所能构成的最大的正方形的边长 为点(i - 1, j - 1)与(i, j - 1), (i - 1, j)三点中最小的边长构成.. 一遍递推, 一边取最大即可 */ #include <cstdio> #define Max 1009 inline int min (int a, int b) { return a < b ? a : b; } inline int max

tyvj1189 盖房子

描述 永恒の灵魂最近得到了面积为n*m的一大块土地(高兴ING^_^),他想在这块土地上建造一所房子,这个房子必须是正方形的.但是,这块土地并非十全十美,上面有很多不平坦的地方(也可以叫瑕疵).这些瑕疵十分恶心,以至于根本不能在上面盖一砖一瓦.他希望找到一块最大的正方形无瑕疵土地来盖房子.不过,这并不是什么难题,永恒の灵魂在10分钟内就轻松解决了这个问题.现在,您也来试试吧. 输入格式 输入文件第一行为两个整数n,m(1<=n,m<=1000),接下来n行,每行m个数字,用空格隔开.0表示该块

【动态规划】盖房子(house)--未提交

问题 D: 盖房子(house) 时间限制: 1 Sec  内存限制: 64 MB提交: 27  解决: 16[提交][状态][讨论版] 题目描述 FJ最近得到了面积为n*m的一大块土地,他想在这块土地上建造一所房子,这个房子必须膏形的.但是,这块土地并非十全十美,上面有很多不平坦的地方(也可以叫瑕疵).这些瑕疵十分以至于根本不能在上面盖一砖一瓦.他希望找到一块最大的正方形无瑕疵土地来盖房子.不过,不是什么难题,FJ在10分钟内就轻松解决了这个问题.现在,您也来试试吧. 输入 第1行为两个整数n

vijos 1057 盖房子 dp 最大子正方形

P1057盖房子 未递交 标签:[显示标签] 描述 永恒の灵魂最近得到了面积为n*m的一大块土地(高兴ING^_^),他想在这块土地上建造一所房子,这个房子必须是正方形的. 但是,这块土地并非十全十美,上面有很多不平坦的地方(也可以叫瑕疵).这些瑕疵十分恶心,以至于根本不能在上面盖一砖一瓦. 他希望找到一块最大的正方形无瑕疵土地来盖房子. 不过,这并不是什么难题,永恒の灵魂在10分钟内就轻松解决了这个问题. 现在,您也来试试吧. 格式 输入格式 输入文件第一行为两个整数n,m(1<=n,m<=

老木匠盖房子的故事

一个独具匠心的老木匠,受顾于一个老板,老木匠凭着自己精湛的手艺,深得老板的青睐,忙碌一辈子的木匠年岁已高,准备和妻子退休回家颐养天年,便向老板说明了自己的想法.老板听了后很是舍不得,不得已,又请老木匠为他最后做一件事,并表示就当是帮他个人的忙吧!-- ? ? ? ?无奈的老木匠,不得已又盖起了最后的一座房子,这一次他干活全然不同于以前的那种尽心尽力干活的劲了,在做工过程中,他每一个环节,偷工减料,得过且过,总之,难得去用心用力了!-- ? ? ? ? 时间不长,老木匠草草完成了老板交给的任务,当

FJ最近得到了面积为n*m的一大块土地,他想在这块土地上建造一所房子,这个房子必须膏形的。但是,这块土地并非十全十美,上面有很多不平坦的地方(也可以叫瑕疵)。这些瑕疵十分以至于根本不能在上面盖一砖一瓦。他希望找到一块最大的正方形无瑕疵土地来盖房子。不过,不是什么难题,FJ在10分钟内就轻松解决了这个问题。 现在,您也来试试吧。

#include <stdio.h>int qiu(int x,int y){ if(x==1&&y==1)return 1; else return 0;} int main(){ int maxx=1; int a[100][100]; int x,y,i,j; scanf("%d %d",&x,&y); for(i=0;i<x;i++) { for(j=0;j<y;j++) { scanf("%d",&a

Vijos1057 盖房子(DP经典题)

之前没有怎么刷过dp的题,所以在此学习了~(感谢walala大神的思路,给了我很大的启发) 也算是自己学习的另一种dp题型吧 先贴上状态转移方程: if(a[i][j]) f[i][j]=min(f[i-1][j],min(f[i][j-1],f[i-1][j-1]))+1 然后更新ans即可 详细的解释一下这个状态转移方程的意义 F[i-1,j] 表示向左能延伸的最大长度 F[i-1,j-1] 表示沿对角线延伸的最大长度 F[i,j-1] 表示向上能延伸的最大长度 很多人一开始不明白为什么明明

为什么我不同意建房子

阿奶说,家里剩点钱,房子那么值钱,我们拿自己的钱去盖个房子吧.钱放着也是贬值. 钱放着会贬值是没错,但要拿来建房子,我不同意.为什么? 第一,我们家依然是一个不富裕的家庭.买菜不敢买贵的,柴米油盐贵个几毛钱心痛的要死,看病也不敢上好医院,动不动就为一毛几块钱的事情吵架,衣服哪里便宜买哪里的,也不管能不能看.好不容易有一两件能看的,一旦下雨淋湿什么的,就只能穿回那些破旧的旧衣服.读书的时候,别的同学有手机,MP3.父母不肯买,一个是怕耽误学习,另外一个是嫌贵.我只好拿自己每天2快半的早餐钱省下来,

其实幸福就在身边

上大学时,在夜里打工回家的路上,我看见一只小猫. 一喊它,它便一边叫一边跟着我走,一路紧追不舍,跟到了家门口. 无奈我只好给它一点吃的.猫咪就在家里住了下来. 我并没有专门为它起名字,有一天听广播,说有个人养的猫不久前失踪了,名字叫彼得.于是我想:"得了,就叫彼得吧." 彼得就这样生活在我家,长成了一只有点凶的小公猫.早晨肚子饿了,它就啪唧啪唧地拍打我的脸.不过一人一猫比较投缘,我们一起生活了好多年. 只要和猫儿一起坐在午后的阳光里,静静地闭上眼睛,时间就会温柔而亲密地流淌过去. 后来