CF-1155 D.Beautiful Array

题目大意:现在有一个数列,还有一个数字x,你可以将这个数列中的一段连续子序列同时乘以这个数字x(当然也可以不乘),然后问你最大子段和是多少

做法:dp,你懂的

#include<iostream>
#include<cstdio>
using namespace std;
long long dp[3],x,ans;
int n;
int main(){
    scanf("%d",&n);
    cin>>x;
    long long a;
    for(int i=1;i<=n;i++){
        cin>>a;
        dp[0]=max(0LL,dp[0]+a);
        dp[1]=max(dp[0],dp[1]+x*a);
        dp[2]=max(dp[1],dp[2]+a);
        ans=max(ans,dp[2]);
    }
    cout<<ans<<endl;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/thmyl/p/11704151.html
今日推荐