像我这种小蒟蒻怎么可能会写高精呢?int128坠好啦
转移方程太显然不写。
#include <cstdio>
#include <cstring>
#include <iostream>
const int max_n = 80 + 5;
int N, M;
__int128 Ans;
__int128 dp[max_n][max_n], Pow[max_n], A[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--)
{
for(int i = 1; i <= M; ++i)
A[i] = read();
memset(dp, 0, sizeof(dp));
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;
}