題目大意:如今有一個數列,還有一個數字x,你能夠將這個數列中的一段連續子序列同時乘以這個數字x(固然也能夠不乘),而後問你最大子段和是多少ios
作法:dp,你懂的spa
#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; }