#include #include #include

using namespace std;

int main() { int N; cin >> N;

vector<int> nums(N);
for (int i = 0; i < N; i++) {
    cin >> nums[i];
}

// 创建一个长度为N的dp数组,dp[i]表示以第i个数结尾的最大和
vector<int> dp(N);

// 初始化dp数组的前两个元素
dp[0] = nums[0];
dp[1] = max(nums[0], nums[1]);

for (int i = 2; i < N; i++) {
    // 状态转移方程:dp[i] = max(dp[i-1], dp[i-2]+nums[i])
    dp[i] = max(dp[i-1], dp[i-2]+nums[i]);
}

cout << dp[N-1] << endl;

return 0;
描述设有N 个正整数1 = N = 50其中每一个均是大于等于1、小于等于300的数。从这N个数中任取出若干个数不能取相邻的数要求得到一种取法使得到的和为最大。例如:当N=5时有5个数分别为:1318284521此时有许多种取法如: 132821 和为6213 45 和为581845 和为63………和为63应该是满足要求的一种取法输入描述第一行是一个整数N第二行有N个符合条件的整数。输出描述一个整

原文地址: https://www.cveoy.top/t/topic/iOAA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录