大佬帮看,用int128做的,只有40分
#include <bits/stdc++.h>
using namespace std;
int n,m,a[82];
__int128 ans,dp[82][82];
void write(__int128 a)
{
if(a < 10){
putchar(a + 48);
return;
}
write(a / 10);
putchar(a % 10 + 48);
}
__int128 f(int l,int r,int cnt)
{
if(dp[l][r] != 0) return dp[l][r];
if(l == r) return a[l] * (1 << cnt);
dp[l][r] = max(f(l,r - 1,cnt + 1) + __int128(a[r]) * (1 << cnt),f(l + 1,r,cnt + 1) + a[l] * (1 << cnt));
return dp[l][r];
}
int main()
{
cin >> n >> m;
for(int i = 1;i <= n;i ++)
{
memset(dp,0,sizeof dp);
for(int j = 1;j <= m;j ++) cin >> a[j];
ans += f(1,m,1);
}
write(ans);
return 0;
}
谢大佬