网站木马诊断,网站建设logo显示怎么设置,北京建网站公司有哪些,网站空间域名费2021牛客OI赛前集训营-提高组#xff08;第三场#xff09;
题目大意
对于一个大小为nnn的数组aaa的任意一点iii#xff0c;若满足ai−1aia_{i-1}a_iai−1ai且aiai1a_ia_{i1}aiai1#xff0c;则称iii为山谷点。111和nnn不可能为山谷点。…2021牛客OI赛前集训营-提高组第三场
题目大意
对于一个大小为nnn的数组aaa的任意一点iii若满足ai−1aia_{i-1}a_iai−1ai且aiai1a_ia_{i1}aiai1则称iii为山谷点。111和nnn不可能为山谷点。
你最多可以修改最多kkk次数组每次可以将一个aia_iai的值变小。
求所有山谷点的aaa值之和的最大值。 题解
设fi,jf_{i,j}fi,j表示最后一次修改在点iii或点iii之前已经修改了jjj次的前iii个数的最大的山谷点的和那么
fi,jfi−1,jf_{i,j}f_{i-1,j}fi,jfi−1,j如果aia_iai本来就是山谷点则fi,jmax(fi,j,fi−2,jai)f_{i,j}\max(f_{i,j},f_{i-2,j}a_i)fi,jmax(fi,j,fi−2,jai)如果j≥1j\geq 1j≥1则fi,jmax(fi,j,fi−2,j−1min(ai−1,ai1)−1)f_{i,j}\max(f_{i,j},f_{i-2,j-1}\min(a_{i-1},a_{i1})-1)fi,jmax(fi,j,fi−2,j−1min(ai−1,ai1)−1)
答案为maxi0kfn−1,i\max\limits_{i0}^kf_{n-1,i}i0maxkfn−1,i。
时间复杂度为O(nk)O(nk)O(nk)。
code
#includebits/stdc.h
using namespace std;
int n,k;
long long ans0,a[2005],f[2005][2005];
int main()
{scanf(%d%d,n,k);for(int i1;in;i){scanf(%lld,a[i]);}for(int i1;in;i){for(int j0;jn;j) f[i][j]-1e18;}f[1][0]0;for(int i2;in;i){for(int j0;jk;j){f[i][j]f[i-1][j];if(a[i]a[i-1]a[i]a[i1]) f[i][j]max(f[i][j],f[i-2][j]a[i]);else if(j1) f[i][j]max(f[i][j],f[i-2][j-1]min(a[i-1],a[i1])-1);}}for(int i0;ik;i) ansmax(ans,f[n-1][i]);printf(%lld,ans);return 0;
}