__int128模板,pow函数会丢精
矩阵取数游戏
https://ac.nowcoder.com/acm/problem/16645
int128大部分oj测评姬都内置定义了(具体的比赛自己提前用官方的测评姬测试),只需写输入和输出函数即可用,int128可加减乘除,__int128还可以和int还有long long 进行运算
__int128的范围为10的36次方左右
include<bits/stdc++.h>
using namespace std;
namespace{
template<typename t="">
inline void read(T &s){
T f=1;s=0;char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
for(;isdigit(ch);ch=getchar()) s=(s<<1)+(s<<3)+(ch^48);
s*=f;
}
}
#define fio ios::sync_with_stdio(false);cin.tei(0);cout.tie(0);
#define ll long long</typename>
inline void write(__int128 x){
if(x < 0){putchar('-');x = -x;}
if(x > 9) write(x / 10);
putchar(x % 10 + '0');
}
int n,m;
ll a[85];
int128 f[85][85];
__int128 ans;
int main(){
read(n);read(m);
int t=n;
while(t--){
memset(f,0,sizeof(f));
for(int i=1;i<=m;++i){
read(a[i]);
}
for(int j=1;j<=m;++j){
for(int i=j;i>=1;--i){
int k=m-j+i;
//int128 x=((ll)1<< (m-j+i));
//f[i][j]=max(f[i+1][j]+a[i]pow(2.0,k),f[i][j-1]+a[j]pow(2.0,k)); //这里不能用pow函数,会丢精,具体原因不明
int128 x=((int128)1<< k); //1左移k位等于2的k次方
f[i][j]=max(f[i+1][j]+a[i]x,f[i][j-1]+a[j]x);
}
}
ans+=f[1][m];
}
write(ans);
return 0;
}