一个一维数组,取一个数后不能取其相邻的数,取a0就不能取a1,取a1不能取a0和a2,求能取最大数之和。
输入:
5(数组长度)
[4,7,9,3,1]
输出: 14
思路:顺应题目int一个相同长度的数组s[n],s[n]对应a[0]到a[n]的最大数之和(不取相邻数)。类似数学里的数列。
然后一个数判断一次,从第一个判断到最后一个就可以了。
代码规范如下
#include<bits/stdc++.h>
using namespace std;
#define maxn 100010
int n,a[maxn],dp[maxn];
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i],dp[i]=0;
dp[1]=a[1];
for(int i=2;i<=n;i++) dp[i]=max(dp[i-2]+a[i],dp[i-1]);
cout<<max(dp[n-1],dp[n])<<endl;
return 0;
}