社区讨论
55pts!玄关求条
P7074[CSP-J 2020] 方格取数参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @md9njvet
- 此快照首次捕获于
- 2025/07/19 10:52 8 个月前
- 此快照最后确认于
- 2025/11/04 04:06 4 个月前
CPP
#include<bits/stdc++.h>
#define int long long
#define mod (int)(1e9+7)
int n,m;
int a[1086][1086];
int f[1086][1086][3];
using namespace std;
signed main(){
// freopen("P7074_3.in","r",stdin);
cin>>n>>m;
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>a[i][j];
for(int i=0;i<=n+1;i++)for(int j=0;j<=m+1;j++)f[i][j][0]=f[i][j][1]=f[i][j][2]=-1e9;
f[1][1][0]=f[1][1][1]=f[1][1][2]=a[1][1];
for(int j=1;j<=m;j++){
if(j==1){
for(int i=2;i<=n;i++){
f[i][j][0]=f[i-1][j][0]+a[i][j];f[i][j][1]=a[i][j];f[i][j][2]=a[i][j];
}
continue;
}
for(int i=1;i<=n;i++)f[i][j][2]=max(f[i][j-1][0],max(f[i][j-1][1],f[i][j-1][2]))+a[i][j];
for(int i=1;i<=n;i++)f[i][j][0]=max(f[i-1][j][0],f[i-1][j][2])+a[i][j];
for(int i=n;i>=1;i--)f[i][j][1]=max(f[i+1][j][1],f[i+1][j][2])+a[i][j];
}
for(int k=0;k<3;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)cout<<f[i][j][k]<<" ";
cout<<endl;
}
cout<<endl;
}
cout<<max(f[n][m][0],f[n][m][2]);
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...