#include<iostream>
#include<cstring>
using namespace std;
const int maxn=100;
//long long a[maxn][maxn];
//long long f[maxn][maxn][maxn];
int n,m;
int mod=10000;//高精度四位压缩最大值;
struct hp{
int len,p[maxn];
hp(){
len=0;
memset(p,0,sizeof(p));
}
void output(){//高精度四位压缩输出
cout<<p[len];
for(int i=len-1;i>0;i--){
if(p[i]==0){
cout<<"0000";//输出前导0;
continue;
}
for(int k=10;k*p[i]<mod;k*=10){
cout<<'0'; //输出前导0;
}
cout<<p[i];
}
}
}f[maxn][maxn],ans;
bool operator <(const hp a,const hp b){//小于号重载;
if(a.len<a.len){
return 1;
}
else if(a.len>b.len) return 0;
for(int i=a.len;i>0;i--){
if(a.p[i]<b.p[i])
return 1;
else if(a.p[i]>b.p[i])
return 0;
}
return 1;
}
hp operator +(const hp a,int b){
hp c;
c=a;
long long k=b;
for(int i=1;i<=c.len+1;i++){
c.p[i]=k+c.p[i];
k=c.p[i]/10000;
c.p[i]%=10000;
}
if(c.p[c.len+1])
c.len=c.len+1;
return c;
}
hp operator +(const hp &a,const hp &b){//高精度加法的运算符重载
hp c;
int len3=max(a.len,b.len);
c.len=len3;
for(int i=1;i<=len3;i++){
c.p[i]=c.p[i]+a.p[i]+b.p[i];
c.p[i+1]=c.p[i]/10000;
c.p[i]=c.p[i]%10000;
}
if(c.p[len3+1])
c.len=len3+1;
return c;
}
/*
hp operator -(const hp a,const hp b){//高精度减法;
int k=0;
if(a<b){
k=1;
hp g;
g=a;
a=b;
b=g;
}
hp c;
len3=b.len;
for(int i=1;i<=len3;i++){
c[i]=c[i]+a[i]-b[i];
}
}
*/
hp operator *(const hp &a,const int &b){
hp c;
int len3=a.len;
c.len=len3;
for(int i=1;i<=len3;i++){
c.p[i]=a.p[i]*b+c.p[i];
c.p[i+1]=c.p[i]/10000;
c.p[i]=c.p[i]%10000;
}
if(c.p[len3+1])
c.len=len3+1;
return c;
}
hp max1(const hp &a,const hp &b){
if(a<b){
return b;
}
else
return a;
}
int main(){
freopen("a.in","r",stdin);
cin>>n>>m;
long long a[1000];
for(int h=1;h<=n;h++){
memset(f,0,sizeof(f));
//cout<<f[1][1].p[1];
memset(a,0,sizeof(a));
for(int g=1;g<=m;g++){
cin>>a[g];
}
for(int l=1;l<=m;l++){
for(int i=1;i+l-1<=m;i++){
int j=i+l-1;
f[i][j]=max1(f[i+1][j]*2+2*a[i],f[i][j-1]*2+2*a[j]);
}
}
ans=ans+f[1][m];
}
ans.output();
}
利用小于号重载写的max为什么会出错呢? 求指出;