数组中有N个整数。如果在索引" i"中选择元素,则在数据包中得到array [i]值,并且数组[i],数组[i-1]选择数组[i]后,数组[i + 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;
}