hnust 1714种草莓(dp)

来源:互联网 发布:数据库巡检模板 编辑:程序博客网 时间:2024/04/29 04:09

传送门:http://acm.hnust.edu.cn/JudgeOnline/problem.php?cid=1436&pid=6

题目描述

小美有一块N*N的正方形菜地,寒暑交替,冬去春来,现在到了可以种植草莓的季节了。遗憾的是,有些格子已经种上别的蔬菜了。小美希望在菜地中找到最大的一块正方形空地来种草莓,以满足她大吃草莓的愿望。
输入
第一行是一个整数T(1<=T<=100),表示测试数据的组数。
每一组测试数据的格式如下:
(1)第一行是一个正整数N(2<=N<=2000),表示正方形菜地的边长。
(2)随后有N行,每行有N个字符。字符只有两种可能,’E’表示空置,’F’表示已经种上蔬菜了。
输出
对于每组测试数据,输出一行,仅包含一个整数,即能找到的最大正方形空地的边长。

分析:dp
以a[i][j]为右下角的正方形,令此时边长为dp[i][j];
dp[i][j]=max(dp[i-1][j-1],max(dp[i][j-1],dp[i-1][j]))+1
复杂度 O(n^2)

但是这里数据太大了,不能用scanf(“%c”,&ch)输入,会TLE,T了n次,输入输出挂??? 有用???
最好少调用max,min函数,自己写。。 防T
队友(dalao)的代码就自己写的。。

const int N=2e3+5;int a[N][N],cnt[N][N];int n,T;void solve(){    int ans=0;    for(int i=0;i<n;i++)    {        for(int j=0;j<n;j++)        {            if(a[i][j]) cnt[i][j] = min(cnt[i-1][j-1],min(cnt[i-1][j],cnt[i][j-1]))+1;            if(ans<cnt[i][j]) ans=cnt[i][j];        }    }    printf("%d\n",ans);}char str[N][N];int main(){    scanf("%d",&T);    while(T--)    {        mem(cnt,0);        scanf("%d",&n);        for(int i=0;i<n;i++)        {            scanf("%s",str[i]);            for(int j=0;j<n;j++)                a[i][j] = (str[i][j] == 'E') ? 1 : 0;        }        solve();    }    return 0;}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果x自拍反方向怎么办 硅胶手机壳出油怎么办 指环扣松了怎么办图解 塑料放久了发粘怎么办 橡胶时间久了粘怎么办 胶的手机套变黄怎么办 手机壳硅胶变黄怎么办 硅胶手机壳大了怎么办 硅胶手机壳变大了怎么办 硅胶手机壳有点大怎么办 硅胶手机壳粘手怎么办 透明手机壳变黄怎么办? 耳机胶套经常掉怎么办 硅胶手机壳粘毛怎么办 耳机海绵套坏了怎么办 沙发垫海绵坏了怎么办 汽车坐海绵坏了怎么办 苹果手机边框有缝隙怎么办 孕期牙套子掉了怎么办 平果充电线不匹配怎么办 苹果六外壳掉漆怎么办 苹果平板充电没反应怎么办 苹果平板黑屏没反应怎么办 苹果平板卡机了怎么办 苹果7plus掉漆怎么办 皮的手机壳脏了怎么办 小米5x边边裂开怎么办 荣耀8的后盖摔了怎么办 hp打印机卡了纸怎么办 华为荣耀9进水了怎么办 小米5x屏幕脱胶怎么办 小米5x后盖松动怎么办 苹果手机没电了怎么办 荣耀9的后盖裂了怎么办 手机一直在开机画面怎么办华为 华为手机一直显示开机画面怎么办 华为p7手机开不了机怎么办 华为荣耀8弯了怎么办 手机壳掉漆了怎么办 华为5a手机音量小怎么办 华为5a手机声音小怎么办