简单dp动态规划问题之最大的不相邻和

本文探讨了一种常见的动态规划问题——找到一个数列中最大的不相邻元素和。通过动态规划策略,我们可以有效地解决这个问题,避免回溯并优化解决方案的时间复杂度。此问题在算法和数据结构的学习中具有重要意义。
摘要由CSDN通过智能技术生成
#include<iostream>
#include<cmath>
using namespace std;

/**寻找不相邻的数的最大和  如4 1 1 9 3 最大值为4+9=13 
 用dp数组来表示dp[i] 为到第i个为止 最大和是多少
 状态转移方程为 
 要么选择第i个 则
 值为第i个的值+dp[i-2] 表示到达第i-2个为止最大的和 因为第i-2才是与第i个不相邻的 

要么不选第i个 则最大为dp[i-1] 到达第i个的前一个可能的最大值和 
*/
int a[100];
int dp[100];
int main(void){
	
	
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	
	dp[0]=0;
	dp[1]=a[1];
	for(int i=2;i<=n;i++){
		
		dp[i]=max(dp[i-2]+a[i],dp[i-1]);
	}
	
	cout<<dp[n]<<endl;//输出的结果 即为到达第n个为止最大的和 
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值