2 条题解
-
3
#include<iostream> using namespace std; const int N = 210; long long a[N][N], sum[N][N], ans = -2e18; int main(){ freopen("ring.in","r",stdin); freopen("ring.out","w",stdout); int n, m; cin >> n >> m; for (int i = 1; i <= n; i ++){ for(int j = 1; j <= m; j ++){ cin >> a[i][j]; a[n+i][j] = a[i][m+j] = a[n+i][m+j] = a[i][j]; ans = max(ans, a[i][j]); } } for (int i = 1; i <= 2*n; i++){ for (int j = 1; j <= 2*m; j ++){ sum[i][j] = sum[i-1][j] + a[i][j]; } } if(ans <= 0){ cout << ans << endl; }else{ ans = -0x3f3f3f3f; for(int i = 1; i <= n; i ++){ for (int j = i; j <= 2*n && j-i+1 <= n; j ++){ for (int u = 1; u <= m; u ++){ long long sumt = 0; for(int k = u; k <= 2*m && k - u + 1 <= m; k ++){ sumt += sum[j][k] - sum[i-1][k]; if(sumt < 0) sumt = 0; ans = max(ans, sumt); } } } } cout << ans << endl; } return 0; } -
1
#include<bits/stdc++.h>using namespace std;long long a[405][405],sum[405];int main(){freopen("ring.in","r",stdin);freopen("ring.out","w",stdout);int n,m,len,c=0;cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];a[i][j+m]=a[i+n][j]=a[i+n][j+m]=a[i][j];}}for(int i=1;i<=n*2;i++){for(int j=1;j<=m*2;j++){sum[j]+=a[(i+len-2)%n+1][j];}}long long ans=-1e18;for(int r=1;r<=n*2;r++){for(int i=1;i<=m*2;i++) sum[i]=0;for (int len =1;len<=n;len++){for(int j=1;j<=m;j++) sum[j]+=a[(r + len - 2) % n + 1][j];long long cur=sum[1],mx=sum[1];for(int j=2;j<=m;j++){cur=max(sum[j],cur+sum[j]);mx=max(mx,cur);}ans=max(ans,mx);}}cout<<ans<<endl;return 0;}
- 1
信息
- ID
- 488
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 120
- 已通过
- 24
- 上传者