题目意思是给一个长度为n的数组,给一个x,进行n+1次操作,(除第一次)每次对一个数加上x,且每个数只能加一次,然后输出n+1个最大子序列和(每次操作后的)
首先求定义 a b c三个数组(a存储所给数组元素,b存储前缀和,c存储在不进行任何操作时的每种长度的最大子序列和)(c的计算仅仅是类似滑动窗口,只需要循环就可求出)
重点是f(i)怎么去求首先不论选那一段去加,所选的这段每个元素一定被加上x,而每次所加的相同,因此就变成
ans=0;i=0;j=1;
for(i<=n) for(j<=n) { max(ans,c[i]+i*x) ; }
cout<<ans ;