codeforces D.もう一つのサブアレイ問題(DP)

 

 トピックリンク:

質問は意図され:nおよびm、kの配列の長さ、およびに最大値。

溶液:M jの残りの部分の最大長さの値と、i番目の代表点右用DP実際、DP [I] [j]を検討してください。

転写式:DP [I] [j]はDPを= [I-1] [J-1] + [I](J> 0)

     DP [I] [J] = MAX(DP [I-1] [M-1] + [I] -k、[I] -k)(j == 0)

コード:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=3e5+5;
ll dp[maxn][12];
ll a[maxn];
int main()
{
    ll n,m,k;
    cin>>n>>m>>k;
    for(int i = 1;i <= n;++i)
        scanf("%lld",&a[i]);
    for(int i = 0;i <= n;++i)
    for(int j = 0;j <= 10;++j)
        dp[i][j]=-1e18;
    dp[0][m-1]=0;
    ll ans=0;
    for(int i = 1;i <= n;++i)
    {
        for(int j = 0;j <= m-1;++j)
        {
            if(j==0)
            dp[i][j]=max(dp[i-1][m-1]+a[i]-k,a[i]-k);
            else
            dp[i][j]=dp[i-1][j-1]+a[i];
            ans=max(ans,dp[i][j]);
        }
    }
    printf("%lld\n",ans);
    return 0;
}

 

おすすめ

転載: www.cnblogs.com/aaddvvaanntteezz/p/11233409.html