• P1736-创意吃鱼法


     1 #include <bits/stdc++.h>
     2 #define maxn 13003
     3 #define _for(i,a,b) for(int i = (a);i < b;i ++)
     4 typedef long long ll;
     5 using namespace std;
     6 inline ll read()
     7 {
     8     ll ans = 0;
     9     char ch = getchar(), last = ' ';
    10     while(!isdigit(ch)) last = ch, ch = getchar();
    11     while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
    12     if(last == '-') ans = -ans;
    13     return ans;
    14 }
    15 inline void write(ll x)
    16 {
    17     if(x < 0) x = -x, putchar('-');
    18     if(x >= 10) write(x / 10);
    19     putchar(x % 10 + '0');
    20 }
    21 int n,m;
    22 int a[2503][2503];
    23 int dp[2503][2503];
    24 int h[2503][2503];
    25 int d[2503][2503];
    26 int main()
    27 {
    28     n = read(), m = read();
    29     _for(i,1,n+1)
    30         _for(j,1,m+1)
    31             a[i][j] = read();
    32     
    33     for(int i = 1;i < n+1;i ++)
    34     {
    35         h[i][1] = 0;
    36         for(int j = 2;j < m+1;j ++)
    37         {
    38             if(a[i][j-1]==0)
    39                 h[i][j] = h[i][j-1]+1;
    40             else
    41                 h[i][j] = 0;
    42         }
    43     }
    44 
    45     for(int i = 1;i < m+1;i ++)
    46     {
    47         d[1][i] = 0;
    48         for(int j = 2;j < n+1;j ++)
    49         {
    50             if(a[j-1][i]==0)
    51                 d[j][i] = d[j-1][i]+1;
    52             else
    53                 d[j][i] = 0;
    54         }
    55     }
    56     
    57     int rnt = 0;
    58     
    59     _for(i,1,n+1)
    60         _for(j,1,m+1)
    61             if(a[i][j]==1)
    62                 dp[i][j] = min(dp[i-1][j-1],min(d[i][j],h[i][j])) + 1,
    63                 rnt = max(rnt,dp[i][j]);
    64     
    65     memset(h,0,sizeof(h));
    66     memset(dp,0,sizeof(dp));
    67     for(int i = 1;i < n+1;i ++)
    68     {
    69         h[i][m] = 0;
    70         for(int j = m-1;j > 1;j --)
    71         {
    72             if(a[i][j+1]==0)
    73                 h[i][j] = h[i][j+1]+1;
    74             else
    75                 h[i][j] = 0;
    76         }
    77     }
    78     
    79     _for(i,1,n+1)
    80         for(int j = m;j > 0;j --)
    81             if(a[i][j]==1)
    82                 dp[i][j] = min(dp[i-1][j+1],min(d[i][j],h[i][j])) + 1,
    83                 rnt = max(rnt,dp[i][j]);
    84     
    85     write(rnt);    
    86     return 0;
    87 }
  • 相关阅读:
    SpringMVC 2
    MySQL--事务,隔离性和隔离级别
    String.intern()
    初识消息队列--ActiveMq
    Java后台上传图片到七牛云
    Thread.interrupt(),Thread.isInterrupted(),Thread.interrupted()碎碎念
    Java基础--对象
    Java后台调用gcc编译C语言代码
    ToolProvider.getSystemJavaCompiler()方法空指针的排坑
    [LeetCode]29 两数相除和一个小坑点
  • 原文地址:https://www.cnblogs.com/Asurudo/p/11346685.html
Copyright © 2020-2023  润新知