不相邻取数
难度:2星
设 为不取第 个数的情况下,前 个数不相邻取数的最大值; 为取第 个数的情况下,前 个数不相邻取数的最大值。那么有转移方程:
不取当前数,那么前一个数取不取都行:
若取当前数,那么前一个数一定不能取:
最后需要输出
#include<bits/stdc++.h>
using namespace std;
long long a[101010],dp[101010][2];
int main(){
int n,i;
cin>>n;
for(i=1;i<=n;i++)cin>>a[i];
for(i=1;i<=n;i++){
dp[i][0]=max(dp[i-1][0],dp[i-1][1]);
dp[i][1]=dp[i-1][0]+a[i];
}
cout<<max(dp[n][0],dp[n][1]);
}