蒟蒻求教

P1736 创意吃鱼法

周子衡 @ 2019-02-10 16:52:46

莫名MLE

代码:

#include<cstdio>
#include<algorithm>

using namespace std;

int mp[2501][2501]={};
int l[2501][2501],r[2510][2510],u[2501][2501]/*,d[2510][2510]*/;
//l[i][j]:how many 0 together in the left of (i,j) excluding itself

int dp1[2501][2501],dp2[2501][2501];

int main()
{
    int i,j;
    int n=0,m=0;scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)for(j=1;j<=m;j++)scanf("%d",&mp[i][j]);
    for(i=1;i<=n;i++)for(j=1;j<=m;j++)l[i][j]=mp[i][j-1]?0:l[i][j-1]+1,u[i][j]=mp[i-1][j]?0:u[i-1][j]+1;
    for(i=n;i>=1;i--)for(j=m;j>=1;j--)r[i][j]=mp[i][j+1]?0:r[i][j+1]+1/*,d[i][j]=mp[i+1][j]?0:d[i+1][j]+1*/;
    for(i=1;i<=n;i++)for(j=1;j<=m;j++)dp1[i][j]=mp[i][j]?min(min(l[i][j],u[i][j]),dp1[i-1][j-1])+1:0;
    for(i=1;i<=n;i++)for(j=m;j>=1;j--)dp2[i][j]=mp[i][j]?min(min(r[i][j],u[i][j]),dp2[i-1][j+1])+1:0;
    int maxn=0;for(i=1;i<=n;i++)for(j=1;j<=m;j++)maxn=max(maxn,dp1[i][j]),maxn=max(maxn,dp2[i][j]);
    printf("%d",maxn);return 0;
}

评测记录


by yurzhang @ 2019-02-10 16:55:01

怎么莫名了。。你开了143MB的数组欸兄dei


by LightningUZ @ 2019-02-10 17:06:14

可是他并没有开动态的空间啊……为什么只MLE了一个点,而其他的点过了?


by yurzhang @ 2019-02-10 17:08:53

可能是只算用掉的空间吧


by 周子衡 @ 2019-02-10 17:14:47

@yurzhang @LightningUZ 过了……


by 周子衡 @ 2019-02-10 17:15:35

用了面向数据滚动数组优化一下就过了


|