[DP] D. Beautiful Array

http://codeforces.com/problemset/problem/1155/D

基础的线性dp

先导知识点:最大子段和 dp[i] = max(dp[i - 1] + arr[i] , 0)

dp[0]转移最大子段和

dp[1]转移dp[0]正在乘val的最大子段和

dp[2]转移dp[1]乘val后的最大子段和

    ll ans = 0;

    for(int i = 1; i <= n; ++i)
    {
        dp[i][0] = max(ll(0), dp[i - 1][0] + arr[i]);

        dp[i][1] = max(dp[i][0], dp[i - 1][1] + arr[i] * k);

        dp[i][2] = max(dp[i][1], dp[i - 1][2] + arr[i]);

        ans = max(ans, dp[i][2]);
    }

猜你喜欢

转载自blog.csdn.net/Zeolim/article/details/89735401