```cpp
#include<bits/stdc++.h>
using namespace std;
const int N = 81;
struct nu
{
int num[50]={0};
int len=0;
};
nu tu[N][N];
nu add(nu a,nu b)
{
nu now;
int len;
if(a.len>b.len) len=a.len;
else len=b.len;
int tp=0;
for(int i=1;i<=len;i++)
{
now.num[i]=(a.num[i]+b.num[i]+tp)%10;
tp=(a.num[i]+b.num[i]+tp)/10;
}
if(tp!=0)
{
now.num[len+1]=tp;
now.len=len+1;
}
else
{
now.len=len;
}
return now;
}
nu tonu(int a)
{
nu now;
int cnt=0;
while(a!=0)
{
cnt++;
now.num[cnt]=a%10;
a/=10;
}
now.len=cnt;
return now;
}
nu dp[N][N][N];
nu mul(nu a,nu b)
{
int tp,cnt;
tp=0;
nu now;
if(a.len<b.len) swap(a,b);
for(int j=1;j<=b.len;++j)
{
cnt=0;
for(int i=1;i<=a.len;++i)
{
int aaa=now.num[i+j-1];
now.num[i+j-1]=(aaa+b.num[j]*a.num[i]+tp)%10;
tp=(aaa+b.num[j]*a.num[i]+tp)/10;
}
while(tp!=0)
{
now.num[a.len+j+cnt]+=tp%10;
tp=tp/10;
cnt++;
}
}
cnt=a.len+b.len;
while(now.num[cnt]==0)
{
cnt--;
}
now.len=cnt;
return now;
}
nu qpow(int b)
{
nu a;
nu now;
a.num[1]=2;
a.len=1;
now.num[1]=1;
now.len=1;
while(b!=0)
{
if(b&1)
{
now=mul(a,now);
}
b>>=1;
a=mul(a,a);
}
return now;
}
void print(nu a)
{
for(int i=a.len;i>=1;i--)
{
printf("%d",a.num[i]);
}
}
nu max(nu a,nu b)
{
if(b.len>a.len) return b;
if(a.len>b.len) return a;
for(int i=a.len;i>=1;i--)
{
if(a.num[i]==b.num[i]) continue;
else
{
if(a.num[i]>b.num[i]) return a;
else return b;
}
}
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
int x;
scanf("%d",&x);
tu[i][j]=tonu(x);
}
}
for(int i=1;i<=m;++i)
{
nu cx=qpow(i);
for(int j=1;j<=n;++j)
{
for(int k=0;k<=i;++k)
{
if(k==0) {dp[i][j][k]=add(dp[i-1][j][k],mul(cx,tu[j][m-(i-k)+1]));continue;}
if(k==i) {dp[i][j][k]=add(dp[i-1][j][k-1],mul(cx,tu[j][k]));continue;}
dp[i][j][k]=max(add(dp[i-1][j][k-1],mul(cx,tu[j][k])),add(dp[i-1][j][k],mul(cx,tu[j][m-(i-k)+1])));
}
}
}
nu ans;
for(int i=1;i<=n;++i)
{
nu maxx;
maxx.len=1;
maxx.num[1]=0;
for(int k=0;k<=m;++k)
{
maxx=max(dp[m][i][k],maxx);
}
ans=add(ans,maxx);
}
print(ans);
return 0;
}
```
这是代码
by Torry_Q @ 2020-10-28 17:02:29
有手就xing
by tuoyang @ 2020-11-21 21:15:47