题目链接:Click here~~
题意:
和HDU 2830类似,只是这次不能再将列任意移动,于是题目完全变成了求最大长方形那道题。
解题思路:
只说如何求最大长方形,我的思路是枚举每个高度,然后以它做基准,向左向右扩张,扩张条件是h[i-k]>=h[k]、h[i+k]>=h[k]。记录扩张的个数即可。
没想到这题竟然进rank了,好高兴。话说我都没用传说中的单调队列呢。
#include <stdio.h>
#include <string.h>
#define N 1002
#define min(a,b) a < b ? a : b
bool Check(char std,char c)
{
if(std == 'a')
return c=='a' || c=='w' || c=='y' || c=='z';
if(std == 'b')
return c=='b' || c=='w' || c=='x' || c=='z';
if(std == 'c')
return c=='c' || c=='x' || c=='y' || c=='z';
}
int main()
{
int R,C,num[N];
char w[N][N];
while(~scanf("%d%d",&R,&C))
{
int ans = 0;
for(int i=0;i<R;i++)
scanf("%s",w[i]);
for(char c='a';c<='c';c++)
{
memset(num,0,sizeof(num));
for(int i=0;i<R;i++)
{
for(int j=0;j<C;j++)
{
if(Check(c,w[i][j]))
++num[j];
else
num[j] = 0;
}
for(int j=0;j<C;j++)
{
if(!num[j])
continue;
int cnt = 1;
for(int k=1;j-k>0 && num[j-k]>=num[j];k++)
++cnt;
for(int k=1;j+k<C && num[j+k]>=num[j];k++)
++cnt;
if(num[j]*cnt > ans)
ans = num[j]*cnt;
}
}
}
printf("%d\n",ans);
}
return 0;
}
分享到:
相关推荐
Largest prime factor Everybody knows any number can be combined by the prime number. Now, your task is telling me what position of the largest prime factor. The position of prime 2 is 1, prime 3 is 2,...
HDU的1250,主要是利用高精度加法,但是代码有点繁琐,效率不是很高
你活的不容易,我活的不容易,他活的也不容易。不过,如果你看了下面的故事,就会知道,有位老汉比你还不容易。
杭电ACMhdu1163
HDU1059的代码
hdu1001解题报告
hdu 1574 passed sorce
HDU的一题........HDU DP动态规
hdu acm 教案 搜索入门 hdu acm 教案 搜索入门
hdu2101AC代码
搜索 dfs 解题代码 hdu1241
hdu 5007 Post Robot 字符串枚举。 暴力一下就可以了。
hdu acm 教案 动态规划(1) hdu acm 教案 动态规划(1)
ACM HDU题目分类,我自己总结的大概只有十来个吧
hdu 1166线段树代码
HDU最全ac代码
自己做的HDU ACM已经AC的题目
hdu动态规划算法集锦
hdu题目分类
HDU图论题目分类