蒟蒻求助

P1005 [NOIP2007 提高组] 矩阵取数游戏

可以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


| 下一页