从数组中以魔法顺序拾取数字后获得的最大总和

时间:2015-08-05 16:41:14

标签: arrays dynamic-programming greedy

数组中有N个整数。如果在索引" i"中选择元素,则在数据包中得到array [i]值,并且数组[i],数组[i-1]选择数组[i]后,数组[i + 1]变为零(即在下一个选择中不能再使用这些元素)。通过在所有元素变为零之前选择数组元素,可以在数据包中产生的最大总和是多少?

1 个答案:

答案 0 :(得分:0)

对于每个我,我们可以采取该项目或忽略它。我们做的是产生更好结果的那个。以下是dp方法:

const int N=10;
int a[]={1,2,3,4,5,6,7,8,9,10};
int dp[N];

int main() {
    dp[0]=a[0];
    dp[1]=max(a[0],a[1]);
    for(int i=2;i<N;i++) {
        dp[i]=max(dp[i-2]+a[i],dp[i-1]);  
        // dp[i-2]+a[i] is we include item i, hence we cannot take item i-1
        // dp[i-1] is we don't take item i
    }
    cout<<dp[N-1];
    return 0;
}