一组数字,选择其中的一些数字后求和,不能选择相邻的,求其中的和最大的方案。
思路:用arry数组来存储数字
opt数组:opt[6]代表有前6个数字时的最好方案;opt[3]代表有前3个数字时的最好方案
递归方程:opt[i] = max{ arry[i] + opt[i-2] , opt[i-1] }
递归出口:opt[0] = arry[0] ; opt[1] = max{ arry[1] , arry[0] }
#include <iostream>
using namespace std;
int arry[10000];
int opt[10000];
int main()
{
int n = 1;
cin >> n;//读入数字个数
for(int i=0;i<n;i++)
{
cin >> arry[i];
}
opt[0] = arry[0];
opt[1] = max(arry[0], arry[1]);
for (int i = 2; i < n; i++)
{
opt[i] = max(opt[i - 1], arry[i] + opt[i - 2]);
}
if(n > 0)
{
cout << opt[n-1] << endl;
}
return 0;
}
样例:1 2 4 1 7 8 3
输出:15