建议把代码放出来= =
by _SAR_ @ 2020-05-12 16:43:08
```cpp
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstdio>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<queue>
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define rev(i,n,a) for (int i=n;i>=a;i--)
#define INF 2147483647
#define ll long long
#define mod(a,b,m) (a%m)*(b%m)%m
#define lowbit(a) a&(-a)
#define err cout<<"error"<<endl;
#define o(a) cout<<a<<endl;
#define r(a) cout<<a<<' ';
#define int128 __int128
#define int __int128//唯一区别
using namespace std;
inline int128 read()
{
char c=getchar();int128 x=0,f=1;
for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
for(;isdigit(c);c=getchar())x=x*10+c-48;
return x*f;
}
inline void print(int128 x){if(x>9) print(x/10);putchar(x%10+48);}
int n,m,a[100][100];
int128 ans,dp[82][82],pw[100];
int128 ksm(int x,int y)
{
if(y==1)return x;
if(y==0)return 1;
int128 ans=1;
if(y%2){ans=x;y--;}
x=x*x;
y/=2;
return ans*ksm(x,y);
}
int128 DP(int x,int y,int line)
{
if(dp[x][y])return dp[x][y];
if(x==y)return a[line][x]*pw[m-(y-x)];
dp[x][y]=max(DP(x+1,y,line)+a[line][x]*pw[m-(y-x)],DP(x,y-1,line)+a[line][y]*pw[m-(y-x)]);
return dp[x][y];
}
signed main()
{
n=read();m=read();
rep(i,1,max(n,m))
pw[i]=ksm(2,i);
rep(i,1,n)
rep(j,1,m)
a[i][j]=read();
rep(i,1,n)
{
memset(dp,0,sizeof(dp));
ans+=DP(1,m,i);
}
print(ans);
return 0;
}
```
by Ocean丶 @ 2020-05-12 16:46:25
md,我知道了,快速幂写糊了,忘加int128了
by Ocean丶 @ 2020-05-12 16:52:50