题目:
在一堆数字中,选择数字之和最大,无法联系选择,必须相隔。
代码:
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int a[10];
int dp[10]; //表示到当前点处的最大值
int fun(int n){ //无记忆递归
if(n==0)
return a[0];
else if(n==1)
return max(a[0],a[1]);
else{
return max(fun(n-1),fun(n-2)+a[n]);
}
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
// cout<<fun(n)<<endl;
for(int i=0;i<n;i++){ //循环递推
if(i==0)
dp[i]=a[i];
else if(i==1)
dp[i]=max(a[0],a[1]);
else{
dp[i]=max(a[i]+dp[i-2],dp[i-1]);
}
}
cout<<dp[n-1];
return 0;
}
//7
//2 1 4 1 7 8 3