hdu1505 City Game

来源:互联网 发布:软件工程硕士 不统考 编辑:程序博客网 时间:2024/06/11 16:14

hdu1505 City Game

1506的扩展 这个就不哆嗦了 知道了1506怎么做 那这道题也就出来了

输入时注意一些

#include<iostream>#include<cstdlib>#include<stdio.h>#define LL long long#define Max(a,b) a>b?a:busing namespace std;const int N=1005;int  a[N][N],l[N][N],r[N][N],maxn,s;int main(){int t;char ch;scanf("%d",&t);while(t--){    int n,m;    scanf("%d%d",&n,&m);    for(int j=0;j<=m;j++)    a[0][j]=0;        for(int i=1;i<=n;i++)        {        for(int j=1;j<=m;j++)        {        scanf(" %c",&ch);        a[i][j]=(ch=='R'?0:a[i-1][j]+1);        }        }        for(int i=1;i<=n;i++)        l[i][1]=1,r[i][m]=m;        for(int i=1;i<=n;i++)        for(int j=2;j<=m;j++)        {            int tt=j;            while(tt>1&&a[i][j]<=a[i][tt-1]) tt=l[i][tt-1];            l[i][j]=tt;        }        for(int i=1;i<=n;i++)        for(int j=m-1;j>=1;j--)        {            int tt=j;            while(tt<m&&a[i][j]<=a[i][tt+1]) tt=r[i][tt+1];            r[i][j]=tt;        }        maxn=0;        for(int i=1;i<=n;i++)       for(int j=1;j<=m;j++)            maxn=Max(maxn,(r[i][j]-l[i][j]+1)*a[i][j]);        printf("%I64d\n",maxn*3);}    return 0;}


0 0
原创粉丝点击