hdu 1505 city game(1506加强版)dp
来源:互联网 发布:八旗军战斗力 知乎 编辑:程序博客网 时间:2024/05/22 06:10
题目大意:
给你一个n*m的矩阵,里面包含F或者是R,现在问你,用F组成一个矩阵,最大面积是多少。
题目和1506很相似,都是一个求最大矩阵面积的问题。只不过1505稍微复杂了一下,用了一个二维的,并且需要对字符串进行处理。
题目分析:
首先对字符串进行处理分析,然后再对每行进行如1506的操作,最后求得最大值就行了,详见代码解析。
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;#define maxn 1005int a[maxn][maxn],l[maxn],r[maxn];int ans;int main(){int t;char s[5];scanf("%d",&t);while( t--){memset(a,0,sizeof(a));//初始化不能忘记 int m,n;scanf("%d%d",&m,&n);for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){ scanf("%s",s); if(s[0]=='F'); a[i][j]=a[i-1][j]+1; else a[i][j]=0;//如果是F,则a[i][j]等于a[i-1][j]加1 ,否则为零 }}ans=-1; for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++) l[j]=r[j]=j; a[i][0]=a[i][n+1]=-1;//在对a【i】【j】操作前首先进行初始化。 for(int j=2;j<=n;j++){int t=j;while(a[i][t-1]>=a[i][j]) t=l[t-1]; l[j]=t;}//这是核心步骤,和1506基本一样。但是也可以把t换掉,直接代。求a【i】【j】的最左端 for(int j=n-1;j>0;j--){ int t=j;while(a[i][t+1]>=a[i][j]) t=r[t+1];r[j]=t;//同上,求最右端。 }for(int j=1;j<=n;j++)if(ans<(r[j]-l[j]+1)*a[i][j]*3) ans=(r[j]-l[j]+1)*a[i][j]*3;} printf("%d\n",ans);}return 0; }
0 0
- hdu 1505 city game(1506加强版)dp
- hdu 1505 City Game (hdu1506加强版)
- [HDU 1505 City Game] HDU1506加强版
- HDU1505 City Game (DP,HDU1506加强版)
- hdu 1505 City Game(dp)
- HDU 1505:City Game(悬线DP)
- HDU 1505 City Game(DP)
- HDU 1505 City Game(DP)
- hdu 1505 City Game(dp)
- HDU 1505 City Game(dp)
- HDU-1505-City Game(DP)
- hdu 1505 dp City Game
- HDU 1505 City Game (DP)
- hdu 1505 City Game(DP)
- hdu 1505 City Game(DP)
- hdu 1505 City Game dp
- HDU 1505 City Game(DP)
- hdu 1505 City Game dp
- Java 8 Stream 如何还原为集合
- Gentoo Linux安装详解--根据官方WiKi整理
- Installing CUDA 7.5 on CentOS 7 - Unable to locate the kernel source
- 蓝牙协议分析1
- 1分钟彻底理解C语言指针的概念
- hdu 1505 city game(1506加强版)dp
- adb shell dumpsys可以查看30多种信息。
- AlarmManager 的使用
- lhgDialog窗口组件
- Linux中iptables命令介绍
- reinforcement learning,增强学习:Policy Gradient
- 关于网站速度优化的一点建议
- 大话C语言指针变量
- sqoop-1.4.6的安装