可以AC就行了嘛。。。
by 萌田薰子 @ 2018-09-26 21:28:59
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,m,a[100][100];
__int128 f[100][100],ans;
__int128 lpy[100];
int top=1;
inline __int128 m2(int n)
{
lpy[1]=2;
if(lpy[n])return lpy[n];
else
while(top<n)lpy[++top]=lpy[top-1]*2;
return lpy[n];
}
inline void dp(int s)
{
int i,j;
memset(f,0,sizeof(f));
for(i=1;i<=m;i++)
f[i][i]=a[s][i]*m2(m);
for(i=1;i<m;i++)
for(j=1;j<=m-i;j++)
f[j][j+i]=max(f[j+1][j+i]+a[s][j]*m2(m-i),f[j][j+i-1]+a[s][j+i]*m2(m-i));
ans+=f[1][m];
}
void print(__int128 x)
{
if(!x)return;
print(x/10);
putchar(x%10+'0');
}
int main()
{
int i,j;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&a[i][j]);
for(i=1;i<=n;i++)
dp(i);
if(ans!=0)
print(ans);
else
putchar('0');
return 0;
}
```
这样却WA
by 跤警 @ 2018-09-26 21:29:07
WHY?求大佬解释
by 跤警 @ 2018-09-26 21:29:30
第12行
by 跤警 @ 2018-09-26 21:30:02
@[跤警](/space/show?uid=86783)
很难讲清楚,应该是$++top$先把$top+1$再运行,而$top++$是先运行再把$top+1$。
实在不理解建议你调试一下,看看变量的变化。
by HNFMS_tomoo @ 2018-09-26 21:38:37
应该一样的呀
by dinghongyu @ 2018-09-26 21:41:23
@[HNFMS_tomoo](/space/show?uid=108669) 谢谢dalao
by 跤警 @ 2018-09-26 21:43:28
@[HNFMS_tomoo](/space/show?uid=108669) 但是第二种写法在DEV-C++下没有问题呀
~~DEV-C++果然BUG多~~
by 跤警 @ 2018-09-26 21:45:32
@[跤警](/space/show?uid=86783)
是吗??
![](https://cdn.luogu.com.cn/upload/pic/34429.png)
by HNFMS_tomoo @ 2018-09-26 21:47:21
@[HNFMS_tomoo](/space/show?uid=108669) 道理都懂,但是个人认为 问题应该在于
假设该句执行前top=x,那赋值语句右边的top-1的值应该为x-1,还是x?~~不知道~~
by 跤警 @ 2018-09-26 21:52:10