划水

P1736 创意吃鱼法

顺便请dalao帮我康康错误北~ 64分 哇p2 p4 p6 p12 ```cpp #include<bits/stdc++.h> using namespace std; int n,m,ans; bool nmap[2510][2510]; int sum[2510][2510],dp[2510][2510],dp2[2510][2510]; int getsum(int a,int b,int x,int y){ return sum[x][y] - sum[x][b - 1] - sum[a - 1][y] + sum[a - 1][b - 1]; } int main(){ cin >> n >> m; for(int i = 1;i <= n;++i){ for(int j = 1;j <= m;++j){ scanf("%d",&nmap[i][j]); sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + nmap[i][j]; dp[i][j] = nmap[i][j]; } } for(int i = 1;i <= n;++i){ for(int j = 1;j <= m;++j){ if(nmap[i][j]){ if(nmap[i - 1][j - 1]) if(getsum(i - dp[i - 1][j - 1],j - dp[i - 1][j - 1],i,j) == dp[i - 1][j - 1] + 1) dp[i][j] = dp[i - 1][j - 1] + 1; if(nmap[i - 1][j + 1]) if(getsum(i - dp2[i - 1][j + 1],j,i,j + dp2[i - 1][j + 1]) == dp2[i - 1][j + 1] + 1) dp2[i][j] = dp2[i - 1][j + 1] + 1; ans = max(max(dp[i][j],dp2[i][j]),ans); } } } cout << ans << endl; } ``` 私以为这么水的代码会t……
by  Lzr @ 2019-11-05 15:50:49


~~红人问号~~
by 诱宵美⑨ @ 2019-11-05 15:51:53


@[诱宵美九](/user/23121) ~~这本来是美妙情头~~
by  Lzr @ 2019-11-05 15:53:51


```cpp #include<bits/stdc++.h> using namespace std; //1736 int n,m,ans; bool nmap[2510][2510]; int sum[2510][2510],dp[2510][2510],dp2[2510][2510]; int getsum(int a,int b,int x,int y){ return sum[x][y] - sum[x][b - 1] - sum[a - 1][y] + sum[a - 1][b - 1]; } int main(){ cin >> n >> m; for(int i = 1;i <= n;++i){ for(int j = 1;j <= m;++j){ scanf("%d",&nmap[i][j]); sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + nmap[i][j]; dp[i][j] = nmap[i][j]; } } for(int i = 1;i <= n;++i){ for(int j = 1;j <= m;++j){ if(nmap[i][j]){ dp[i][j] = dp2[i][j] = 1; if(nmap[i - 1][j - 1]){ int t1 = i - 1, t2 = j - 1; while(dp[t1][t2] && getsum(i - dp[t1][t2],j - dp[t1][t2],i,j) != dp[t1][t2] + 1 && t1 >= 1 && t2 >= 1) --t1, --t2; dp[i][j] = max(dp[t1][t2] + 1,dp[i][j]); } if(nmap[i - 1][j + 1]){ int t1 = i - 1, t2 = j + 1; while(dp[t1][t2] && getsum(i - dp2[t1][t2],j,i,j + dp2[t1][t2]) != dp2[t1][t2] + 1 && t1 >= 1 && t2 <= m) --t1, ++t2; dp2[i][j] = max(dp2[t1][t2] + 1,dp2[i][j]); } ans = max(max(dp[i][j],dp2[i][j]),ans); } } } cout << ans << endl; /*for(int i = 1;i <= n;++i){ for(int j = 1;j <= m;++j) cout << dp[i][j] << " "; cout << endl; } cout << endl; for(int i = 1;i <= n;++i){ for(int j = 1;j <= m;++j) cout << dp2[i][j] << " "; cout << endl; }*/ } ``` 改了下,92分,9tle了qwq
by  Lzr @ 2019-11-08 12:47:41


a了!感谢大家!
by  Lzr @ 2019-11-08 12:52:59


|