代码如下
#include<bits/stdc++.h>
using namespace std;
string jia(string a,string b){
if (a.size()<b.size()) swap(a,b);
while (a.size()!=b.size()) b="0"+b;
int a1=a.size();
int ans[100005]={};
for (int i=a1-1;i>=0;i--){
int o=ans[i+1];
ans[i+1]=(a[i]+b[i]-'0'-'0'+o)%10;
ans[i]=(a[i]+b[i]-'0'-'0'+o)/10;
}
string ans1="";
if (ans[0]==1) ans1="1";
for (int i=1;i<=a1;i++){
ans1+=char(ans[i]+'0');
}
return ans1;
}
string cheng(string a,string b){
int ans[200005]={},right=0;
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
if (a.size()<b.size()) swap(a,b);
for (int i=0;i<a.size();i++) for (int j=0;j<b.size();j++) ans[i+j]+=(a[i]-'0')*(b[j]-'0');
for (int i=0;i<=a.size()+b.size();i++){
int j=i,k=ans[i];
ans[i]=0;
while (k){
if (j>right) right=j;
ans[j]+=k%10;
k/=10;
j++;
}
}
string ans1="";
for (int i=right;i>=0;i--) ans1+=char(ans[i]+'0');
return ans1;
}
string max(string a,string b){
if (a.size()!=b.size()) return (a.size()>b.size()?a:b);
return (a>b?a:b);
}
int n,m;
string sum="0";
int main(){
cin>>n>>m;
for (int i=1;i<=n;i++){
string dp[85][85];
for (int j=1;j<=m;j++) cin>>dp[j][j];
for (int j=2;j<=m;j++){
for (int k=1;k<=m-j+1;k++){
dp[k][k+j-1]=max(jia(dp[k][k],jia(dp[k+1][k+j-1],dp[k+1][k+j-1])),jia(dp[k+j-1][k+j-1],jia(dp[k][k+j-2],dp[k][k+j-2])));
}
}
sum=jia(sum,dp[1][m]);
}
cout<<jia(sum,sum);
return 0;
}