像我这种小蒟蒻怎么可能会写高精呢?int128坠好啦
转移方程太显然不写。
#include <cstdio>
#include <cstring>
#include <iostream>
const int max_n=80+4;
int N,M;
__int128 Ans;
__int128 A[max_n],dp[max_n][max_n],Pow[max_n];
inline int read()
{
register int x=0;
register char ch=getchar();
while(!isdigit(ch))
ch=getchar();
while(isdigit(ch))
{
x=(x<<1)+(x<<3)+ch-‘0‘;
ch=getchar();
}
return x;
}
inline void out(__int128 x)
{
if(x>9) out(x/10);
putchar(x%10+‘0‘);
}
int main()
{
N=read(),M=read();
Pow[0]=1;
for(int i=1;i<=M;++i)
Pow[i]=Pow[i-1]<<1;
while(N--)
{
memset(dp,0,sizeof(dp));
for(int i=1;i<=M;++i)
A[i]=read();
for(int l=M;l>=1;--l)
for(int r=l;r<=M;++r)
dp[l][r]=std::max(dp[l+1][r]+A[l]*Pow[M-r+l],dp[l][r-1]+A[r]*Pow[M-r+l]);
Ans+=dp[1][M];
}
out(Ans);
return 0;
}