陣列的最大代價

brucehb發表於2017-04-08
陣列A包含N個元素A1, A2......AN。陣列B包含N個元素B1, B2......BN。並且陣列A中的每一個元素Ai,都滿足1 <= Ai <= Bi。陣列A的代價定義如下:
 
 
(公式表示所有兩個相鄰元素的差的絕對值之和)

給出陣列B,計算可能的最大代價S。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int fun(vector<int> &B, int N)
{
    int dp[N][2];
    dp[0][0] = 0;
    dp[0][1] = 0;
    
    for (int i = 1; i < N; i++)
    {
        dp[i][0] = max(dp[i-1][0], dp[i-1][1] + B[i-1] - 1);
        dp[i][1] = max(dp[i-1][0] + B[i] - 1, dp[i-1][1] + abs(B[i]-B[i-1]));
    }
    
    return max(dp[N-1][0], dp[N-1][1]);
}

int main()
{
    int N;
    scanf("%d", &N);
    vector<int> B;
    int a;
    for (int i = 0; i < N; i++)
    {
        scanf("%d", &a);
        B.push_back(a);
    }
    
    cout << fun(B, N) << endl;
    
    return 0;
}


相關文章