求助不开O2优化为什么过不了

P1216 [USACO1.5] [IOI1994]数字三角形 Number Triangles

linshangyuan @ 2024-02-08 22:23:12

#include<bits/stdc++.h>

using namespace std;

int a[1001][1001],f[1001][1001],n;

int main ()

{

    cin>>n;

    for(int i=1;i<=n;i++)

    for(int j=1;j<=i;j++)

    cin>>a[i][j];

    for(int i=n;i>=1;i--)

    for(int j=1;j<=i;j++)

    f[i][j]=a[i][j]+max(f[i+1][j],f[i+1][j+1]);

    cout<<f[1][1];

    return 0;

}

不开O2优化为什么过不了,开O2优化就过了。


by Imaginative @ 2024-02-08 22:49:53

f[i][j]=a[i][j]+max(f[i+1][j],f[i+1][j+1]);

这里,你数组只开1001会爆空间,开到1005就过了


by Terrible @ 2024-02-08 23:10:25

开 O2 和不开 O2,越界访问到的数组(内存位置)是不一样的。

https://www.luogu.com.cn/paste/l8bc1a40

不管怎么说,尽量避免数组越界行为。


|