zoukankan      html  css  js  c++  java
  • hdu City Game

    做这题之前建议做一下hdu1506题,两道题是极度相似的题,不同的是这个要处理的是m行,所以可以用一个dp[][]数组存储矩形的高度,之后就变成hdu1506了。

    例如测试样例:
    0 1 1 1 1 1                                               0 1 1 1 1 1
    1 1 1 1 1 1           (F=1,R=0,方便求和)       1 2 2 2 2 2
    0 0 0 1 1 1           转化完就是右边矩阵           0 0 0 3 3 3
    1 1 1 1 1 1                                               1 1 1 4 4 4
    1 1 1 1 1 1                                               2 2 2 5 5 5
    同样转移方程式:l[i]=l[l[i]-1],r[i]=r[r[i]-1];
    #include"iostream"
    #include"stdio.h"
    #include"algorithm"
    #include"string.h"
    #include"cmath"
    #include"queue"
    #define mx 1010
    using namespace std;
    __int64 dp[mx][mx];
    __int64 l[mx],r[mx],m,n,k,i,j,temp,ans;
    char ch;
    int main()
    {
        cin>>k;
        while(k--)
        {
            cin>>m>>n;
            getchar();
            for(i=1;i<=m;i++)
            {
                for(j=1;j<=n;j++)
                {
                    cin>>ch;
                    if(ch=='R') dp[i][j]=0;
                    else dp[i][j]=1;
                    getchar();
                }
            }
            for(i=2;i<=m;i++)
            {
                for(j=1;j<=n;j++)
                {
                    if(dp[i][j]!=0) dp[i][j]=dp[i-1][j]+1;
                }
            }
            ans=0;
            for(i=1;i<=m;i++)
            {
                dp[i][0]=dp[i][n+1]=-1;
                for(j=1;j<=n;j++)
                {
                    l[j]=r[j]=j;
                }
                for(j=1;j<=n;j++)
                {
                    while(dp[i][l[j]-1]>=dp[i][j]&&dp[i][j]!=0)
                        l[j]=l[l[j]-1];
                }
                for(j=n;j>=1;j--)
                {
                    while(dp[i][r[j]+1]>=dp[i][j]&&dp[i][j]!=0)
                        r[j]=r[r[j]+1];
                }
                for(j=1;j<=n;j++)
                {
                    temp=dp[i][j]*(r[j]-l[j]+1);
                    if(temp>ans) ans=temp;
                }
            }
            cout<<ans*3<<endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    boost::function和boost::bind 介绍
    va_list 简介
    tcp异常断开的重连解决方法
    Nginx作为代理服务之反向代理
    Nginx作为代理服务之正反代理
    Nginx作为静态资源web服务之防盗链
    Nginx作为静态资源web服务之跨域访问
    Nginx作为静态资源web服务之缓存原理
    Nginx作为静态资源web服务之文件读取
    阿里云环境中配置tomcat7可能出现的问题及解决方法
  • 原文地址:https://www.cnblogs.com/acm-jing/p/4409045.html
Copyright © 2011-2022 走看看