许熠谦 • 2年前
using namespace std; const int N=100; int n,m; __int128 a[N][N],f[N][N]; template inline void read(T &x){
x=0;int w=1;
char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
for(;ch>='0'&&ch<='9';ch=getchar())
	x=(x<<3)+(x<<1)+(ch&15);
x*=w; 
} inline void write(__int128 x){
if(x<0){
    putchar('-');
    x=-x;
}
if(x>9)
    write(x/10);
putchar(x%10+'0');
} int128 dp(int128 sum[]) {
memset(f,0,sizeof(f));
int i,j;
for(i=0;i<m;i++)
	for(j=1;i+j<=m;j++)
		f[j][i+j]=max(2*(f[j+1][i+j]+sum[j]),2*(f[j][i+j-1]+sum[i+j]));
return f[1][m];
} int main() {
read(n),read(m);
int i,j;
for(i=1;i<=n;i++)
	for(j=1;j<=m;j++)
		read(a[i][j]);
__int128 ans=0;
for(i=1;i<=n;i++)
	ans+=dp(a[i]);
write(ans);
return 0;
}
评论:
请先登录,才能进行评论