今天,我尝试了很多次来解决代码中的问题,我使用dp但仍然失败TL。你们可以指出我的代码中的哪个部分需要很长时间吗?谢谢!
#include<bits/stdc++.h>
typedef long long ll;
ll n,m,k,a[5000],result=0, memo[5000][5000], sum[5000];
ll maxsum(int p,int t)
{
if (t==0) return 0;
if (memo[p][t]!=-1)
return memo[p][t];
ll tp=0;
for (int i=p+m; i+(t-1)*m-1<n; ++i)
tp=std::max(tp,maxsum(i,t-1));
memo[p][t]=tp+sum[p];
return memo[p][t];
}
int main()
{
std::ios::sync_with_stdio(0);
std::cin.tie(0);
std::cin>>n>>m>>k;
for (int i=0; i<n; ++i)
std::cin>>a[i];
for (int i=0; i<m; ++i)
sum[0]+=a[i];
for (int i=1; i+m-1<n; ++i)
sum[i]=sum[i-1]+a[i+m-1]-a[i-1];
std::fill(&memo[0][0],&memo[n][k],-1);
for (int i=0; i+k*m-1<n; ++i)
result=std::max(result,maxsum(i,k));
std::cout<<result;
}
我在此提交的链接:http://codeforces.com/contest/467/submission/24322748
答案 0 :(得分:1)
答案可能为零,因此您应该在开始时将动态数组的所有元素设置为-1,然后在函数中检查它们是否等于-1。