467C-CodeForces时间复杂度

时间:2017-01-31 18:15:12

标签: time-complexity

今天,我尝试了很多次来解决代码中的问题,我使用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

1 个答案:

答案 0 :(得分:1)

答案可能为零,因此您应该在开始时将动态数组的所有元素设置为-1,然后在函数中检查它们是否等于-1。