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; }