dp——cf1357D

/*
dp[i][j]表示以i结尾,前段最大值j
*/
#include<bits/stdc++.h>
using namespace std;
#define N 200005
#define B 30
 
int n,a[N],dp[N][100];
 
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    memset(dp,-0x3f,sizeof dp);
    dp[1][a[1]+B]=0;
    
    int ans=0;
    for(int i=2;i<=n;i++){
        dp[i][a[i]+B]=0;
        for(int j=0;j<=60;j++)if(dp[i-1][j]!=-0x3f3f3f3f){
            if(j<=a[i]+B)//删a[i] 
                dp[i][a[i]+B]=max(dp[i][a[i]+B],dp[i-1][j]+j-B);
            else//删j 
                dp[i][j]=max(dp[i][j],dp[i-1][j]+a[i]);    
        }
    }
    for(int i=1;i<=n;i++)
        for(int j=0;j<=60;j++)
            ans=max(ans,dp[i][j]);
    cout<<ans<<'\n';
} 

 

posted on 2020-05-29 11:21  zsben  阅读(136)  评论(0)    收藏  举报

导航