这题有毒

P1736 创意吃鱼法

@[aface0427](/space/show?uid=28053) 五个int数组不就行了吗
by xw001 @ 2017-11-07 14:00:02


@[xw001](/space/show?uid=15044) 2333 说得好 可以用四个 不过懒得改
by aface0427 @ 2017-11-07 18:09:00


@[aface0427](/space/show?uid=28053) 看看你的代码! ..
by Bartholomew @ 2017-12-01 21:40:29


```cpp #include<iostream> #include<cstdio> #include<algorithm> #include<queue> #include<vector> #include<cstring> #include<cmath> using namespace std; #define ll long long const int maxn=1e6+7; void read(int &x) { char c=getchar(); x=0; int flag=1; while(!isdigit(c)) { if(c=='-')flag=-1; c=getchar(); } while(isdigit(c)) { x=x*10+c-48; c=getchar(); } x*=flag; } int n,m; int dp[2505][2505]; int height[2505][2505]; int lef[2505][2505]; int rig[2505][2505]; bool ju[2505][2505]; int dp2[2505][2505]; int main() { read(n),read(m); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { int x; read(x); ju[i][j]=x; } } for(int i=n;i>=1;i--) { for(int j=1;j<=m;j++) { if(ju[i][j]==1) { height[i][j]=0; } else height[i][j]=height[i+1][j]+1; } } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(ju[i][j]==1) { lef[i][j]=0; } else lef[i][j]=lef[i][j-1]+1; } } for(int i=1;i<=n;i++) { for(int j=m;j>=1;j--) { if(ju[i][j]==1) { rig[i][j]=0; } else rig[i][j]=rig[i][j+1]+1; } } for(int i=1;i<=n;i++) { if(ju[i][m])dp[i][m]=1; } for(int i=1;i<=m;i++) { if(ju[n][i]) { dp[n][i]=1; dp2[n][i]=1; } } for(int i=1;i<=n;i++) { if(ju[i][1])dp[i][1]=1; } for(int i=n-1;i>=1;i--) for(int j=m-1;j>=1;j--) { if(ju[i][j]) { dp[i][j]=min(min(dp[i+1][j+1]+1,rig[i][j+1]+1),height[i+1][j]+1); } } for(int i=n-1;i>=1;i--) { for(int j=2;j<=m;j++) { if(ju[i][j]) { dp2[i][j]=min(height[i+1][j]+1,min(dp2[i+1][j-1]+1,lef[i][j-1]+1)); } } } int ans=0; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { ans=max(ans,max(dp[i][j],dp2[i][j])); } } cout<<ans; return 0; } @[Bartholomew](/space/show?uid=50047) ```
by aface0427 @ 2018-01-30 10:44:57


|