注意点:
- if(canGet[x][y-1])l[x][y]=max(l[x][y],l[x][y-1]);
- if(canGet[x][y-1])r[x][y]=min(r[x][y],r[x][y-1]);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include<cstdio> #include<iostream> using namespace std; const int MAXN=2e3,INF=2e9; bool canGet[MAXN][MAXN]; //可获取 int l[MAXN][MAXN],r[MAXN][MAXN]; int h[MAXN][MAXN]; int maxY,maxX; int main(){ scanf ( "%d%d" ,&maxY,&maxX); for ( int y=1;y<=maxY;y++){ for ( int x=1;x<=maxX;x++){ char tmp; cin>>tmp; if (tmp== 'F' )canGet[x][y]=1; else canGet[x][y]=0; } } for ( int x=1;x<=maxX;x++){ for ( int y=1;y<=maxY;y++){ l[x][y]=r[x][y]=x; } } for ( int y=1;y<=maxY;y++){ for ( int x=1;x<=maxX;x++){ if (!canGet[x][y]) continue ; if (canGet[x-1][y])l[x][y]=l[x-1][y]; else l[x][y]=x; } for ( int x=maxX;x>=1;x--){ if (!canGet[x][y]) continue ; if (canGet[x+1][y])r[x][y]=r[x+1][y]; else r[x][y]=x; } } for ( int x=1;x<=maxX;x++) r[x][0]=INF; int ans=0; for ( int y=1;y<=maxY;y++){ for ( int x=1;x<=maxX;x++){ if (canGet[x][y]){ h[x][y]=h[x][y-1]+1; if (canGet[x][y-1])l[x][y]=max(l[x][y],l[x][y-1]); if (canGet[x][y-1])r[x][y]=min(r[x][y],r[x][y-1]); ans=max(ans,(r[x][y]-l[x][y]+1)*h[x][y]); } } } cout<<ans*3<<endl; return 0; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
· 为什么 .NET8线程池 容易引发线程饥饿
· 终于决定:把自己家的能源管理系统开源了!
· [.NET] 使用客户端缓存提高API性能
· 外部H5唤起常用小程序链接规则整理
· C#实现 Winform 程序在系统托盘显示图标 & 开机自启动
· WPF 怎么利用behavior优雅的给一个Datagrid添加一个全选的功能