蓝桥杯备考:动态规划dp之最大子段和

和之前的顺序一下

step1:

我们先确定状态表示 fi表示以i为终点的最大子段和

step2:确定状态表示方程

fi=fi-1+ai,仅仅是这样吗?no absolutely not

我们假如以i-1为终点的最大字段和是负无穷,而ai是一个正数,那么 fi-1+ai肯定是比ai本身要小的,

所以我们真实的状态方程应该是fi=max(ai,ai+fi-1)

step3;初始化

我们数组下标从1开始,那么初始化f1 的时候 f1应该等于ai fi-1的值不应该影响最终结果

所以刚开始我们数组要初始化成0

为什么从下标1开始,这是为了防止越界

cpp 复制代码
#include <iostream>
using namespace std;
const int N = 2e5+10;
typedef long long LL;
LL f[N];
LL a[N];
LL n;
int main()
{
	cin >> n;
	for(LL i = 1;i<=n;i++)
	{
		cin >> a[i];
	}
	LL ret = -1e9;
	for(LL i = 1;i<=n;i++)
	{
		f[i] = max(f[i-1]+a[i],a[i]);
		ret = max(f[i],ret);
	}
	cout << ret << endl;
	
	
	
	
	
	return 0;
}

当然我们是可以对空间做一些优化的,比如说,我们不必开一个aN数组,我们有一个fN数组就足够了,我们用一个临时变量输入n次代表每个数就行了

cpp 复制代码
#include <iostream>
using namespace std;
const int N = 2e5+10;
typedef long long LL;
LL f[N];
LL a[N];
LL n;
int main()
{
	LL ret = -1e9;
	cin >> n;
	LL x;
	for(LL i = 1;i<=n;i++)
	{
		cin >> x;
		f[i] = max(f[i-1]+x,x);
		ret = max(f[i],ret); 
	}
	cout << ret << endl;
	
	
	
	
	
	return 0;
}
相关推荐
AIHR数智引擎29 分钟前
15%对撞40%:WEF白皮书里的AI组织隐忧
数据库·人工智能·经验分享·职场和发展·aihr
满怀冰雪2 小时前
第29篇-状态压缩DP-当状态很多时如何降维优化
java·算法·动态规划
测试秃头怪13 小时前
如何评估自动化测试脚本的编写时间和维护工作量?
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
tyqtyq2220 小时前
营养餐单规划:AI 科学饮食规划系统的鸿蒙实现
人工智能·学习·华为·职场和发展·生活·harmonyos
六点_dn21 小时前
我的面试复盘总结(南天信息)
面试·职场和发展
学究天人1 天前
数学公理体系大全:第一章 命题逻辑:真值之舞
人工智能·算法·机器学习·数学建模·动态规划·图论·抽象代数
程序员杰哥1 天前
接口测试知识总结
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
旖-旎1 天前
《LeetCode 978 最长湍流子数组 || LeetCode 139 单词拆分》
c++·算法·leetcode·动态规划
学究天人1 天前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(补充卷9)
人工智能·线性代数·算法·数学建模·动态规划·原型模式·抽象代数
初学者,亦行者1 天前
算法设计与分析:动态规划 - TSP问题和0-1背包问题
c++·算法·动态规划