@[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