万能头文件的骚跳之处

P2858 [USACO06FEB] Treats for the Cows G/S

@[C201914](/space/show?uid=23908) 额,明明就是你开大了数组。。。
by 1124828077ccj @ 2018-06-21 20:32:20


...
by Sheffield @ 2018-06-21 20:32:41


帮你重发一遍: ```cpp #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int n,a[2001],f[2001][2001]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); for(int i=1;i<=n;i++) for(int j=0;j<=i;j++) { int temp=i-j; f[i][j]=max(f[i-1][j-1]+a[j]i,f[i-1][j]+a[n-temp+1]i); } int maxx=0; for(int i=1;i<=n;i++)maxx=max(maxx,f[n][i]); printf("%d",maxx); return 0; } ``` 得分91,但WA的点自测试过了的。换了#include<bits/stdc++.h>就过了
by _ztyqwq @ 2018-06-21 20:34:27


我刚刚用小号交了一下你发的代码,把数组开大就过了,不是头文件的问题
by 1124828077ccj @ 2018-06-21 20:35:18


```cpp #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int n,a[2001],f[2001][2001]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) for(int j=0;j<=i;j++) { int temp=i-j; f[i][j]=max(f[i-1][j-1]+a[j]i,f[i-1][j]+a[n-temp+1]i); } int maxx=0; for(int i=1;i<=n;i++) maxx=max(maxx,f[n][i]); printf("%d",maxx); return 0; } ```
by _ztyqwq @ 2018-06-21 20:35:59


那是你的代码,not mine
by _ztyqwq @ 2018-06-21 20:36:54


```cpp f[i][j]=max(f[i-1][j-1]+a[j]*i,f[i-1][j]+a[n-temp+1]*i); ``` 这句话是有漏洞的,当j=0的时候会越界。。。因为内存是连续的,所以数组开大之后会访问到那些没有用的位置,不会出问题,但数组开得刚刚好就会访问到有东西的位置,就炸了。。。 @[C201914](/space/show?uid=23908)
by 1124828077ccj @ 2018-06-21 20:37:52


@[C201914](/space/show?uid=23908)
by 1124828077ccj @ 2018-06-21 20:38:07


谢谢大佬
by C201914 @ 2018-06-21 20:40:56


|