动规作业-求数组不相邻元素之和的最大值

描述
给定一个长度为n的数组,从其中任意选择不相邻的m个元素形成子数组,求这个子数组所有元素之和的最大值。

关于输入
输入包括两行。
第一行为一个正整数n(0<=n<=10000)。
第二行为n个正整数,表示整个数组。

关于输出
输出一个数字,代表数组所有不相邻元素之和的最大值。

例子输入
5

1 2 3 4 5
例子输出
9

代码:

 1 //求数组不相邻元素之和的最大值 
 2 //2019-11-26 
 3 #include<iostream>
 4 using namespace std;
 5 int a[10010];
 6 int d[10010]; //d[i]表示从前i个数中取不相邻元素之和的最大值 
 7 int main(){
 8     int n;
 9     cin>>n;
10     int i,j;
11     for(i = 1; i <= n; i++)
12         cin>>a[i]; 
13     d[1] = a[1];
14     d[2] = max(a[1],a[2]);
15     for(i = 3; i <= n; i++)
16         d[i] = max(d[i-1],d[i-2]+a[i]);
17     cout<<d[n]; 
18     return 0;
19 }

备注:

这道题感觉有点像是一维的背包问题类似?都是考虑从前i个数里取。首先要注意初始化前两个数,因为要用到i-2。还有不同的是,因为不相邻的限制,考虑第i时,如果取第i个数,那么就应该是d[i-2]+a[i],如果不取,就延续d[i-1]

原文地址:https://www.cnblogs.com/fangziyuan/p/11936888.html