比如:Twilight_
创建时间:2017-09-02 15:47:48
这篇题解,上面说的AC代码其实会MLE#2、#9、#10三个测试点。
//这是该题解提供者的“AC”代码
#include<bits/stdc++.h>
using namespace std;
int n,sum[3001],c[3001],dp[3001][3000]; //数组要开大一点,不然会WA;
int main()
{
cin>>n;
for(int i=n;i>=1;i--)cin>>c[i];//为了处理方便,我们直接逆序输入(编号自底向上)
for(int i=1;i<=n;i++)sum[i]+=sum[i-1]+c[i];//获取前缀和
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
dp[i][j]=dp[i][j-1];//重合部分
int k=2*j-1;
if(k<=i)dp[i][j]=max(dp[i][j],sum[i]-dp[i-k][k]);//新增状态
k+=1;
if(k<=i)dp[i][j]=max(dp[i][j],sum[i]-dp[i-k][k]);//新增状态
}
cout<<dp[n][1]<<endl;
return 0;
}
实际上只能得70分。错在哪里?就是那句数组要开大一点,然后ta开了3001……人家题目当中说了小于等于2000,所以说我把范围改成2001就AC了。这种细节性的错误都发现不了而是误导别人,自信地在批注里面写开大点,因此这是该撤下的。
//这是我的代码部分,你可以看看数据范围
#include<bits/stdc++.h>
using namespace std;
const int p=2001;
int sum[p],a[p],dp[p][p];
int main(){
int n;
cin>>n;
for(int i=n;i>=1;i--)
cin>>a[i];
for(int i=1;i<=n;i++)
sum[i]+=sum[i-1]+a[i];
//后面内容省略
return 0;
}
因此请求撤下题解,还有一些以“显然,易得、某位大佬曾经说过”等为托省去思路的可以考虑一并撤下