题目在此:P1005 [NOIP2007 提高组] 矩阵取数游戏
捞上一个求助帖,为同一道题目:神奇错误,蒟蒻求调,玄关
#include<bits/stdc++.h>
using namespace std;
/*2024/7/12
*question id:1574+P1005
*answer:
*idea:
*else:
*/
const int maxn=105;
__int128 f[maxn][maxn],p[maxn],ans;
int n,m,a[maxn][maxn];
inline void print(__int128 n){
if(n<0){
putchar('-');
n*=-1;
}
if(n>9)print(n/10);
putchar(n%10+'0');
return;
}
inline void work(long long tmp){
memset(f,0,sizeof(f));
for(int i=1;i<=m;i++)f[i][i]=p[m]*a[tmp][i];
for(int l=2;l<=m;l++)for(int i=1;i+l-1<=m;i++){
int j=i+l-1;
f[i][j]=max(f[i+1][j]+(p[m-l+1]*a[tmp][i]),f[i][j-1]+(p[m-l+1]*a[tmp][j]));
}
ans=ans+f[1][m];
return;
}
int main(){
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%lld",&a[i][j]);
p[1]=2;
for(int i=2;i<=m;i++)p[i]=p[i-1]*2;
for(int i=1;i<=n;i++)work(i);
print(ans);
printf("\n");
return 0;
}