社区
数据结构与算法
帖子详情
关于DP中的最大子段和
javadream11
2009-08-20 03:23:48
给我详细解释下这个状态转移方程:b[j] = max{b[j-1]+a[j], a[j]}, 1<=j<=n
...全文
321
14
打赏
收藏
关于DP中的最大子段和
给我详细解释下这个状态转移方程:b[j] = max{b[j-1]+a[j], a[j]}, 1<=j<=n
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
青蛙果果
2009-08-23
打赏
举报
回复
int MaxSum(int n,int *a)
{
int sum=0;
for(int i=1;i <n;i++)
{
a[i]=max( a[i-1]+a[i],a[i]);
sum=max( sum,a[i]);
}
return sum;
}
a[i] 表示以a[i]为结尾的子段的最大和 当然不一定是所要的最终和 比如1->i-1 和为9 而a[i]为-2,因而以a[i] 为结尾的最大和是7,对于整个数段来说至少应是9,因而用到sum来记录所要求的最大和
acdbxzyw
2009-08-20
打赏
举报
回复
[Quote=引用 4 楼 peacefulby 的回复:]
b[j]=max{a[i]++a[j]},1 <=i <=j,且1 <=j <=n,则所求的最大子段和为max b[j],1 <=j <=n。
由b[j]的定义可易知,
当b[j-1]>0时b[j]=b[j-1]+a[j],否则b[j]=a[j]。
故b[j]的动态规划递归式为:
b[j]=max(b[j-1]+a[j],a[j]),1 <=j <=n。
T(n)=O(n)
[/Quote]
黄舒颖 咸丫蛋
2009-08-20
打赏
举报
回复
正解,Got it
[Quote=引用 11 楼 litaoye 的回复:]
转帖一个别人的吧
int MaxSum(int n,int *a)
{
int sum=a[0],b=0;
for(int i=0;i <n;i++)
{
if(b>0) b+=a[i];
else b=a[i];
if(b>sum) sum=b;
}
return sum;
}
引用 10 楼 javadream11 的回复:
引用 9 楼 litaoye 的回复:
O(n)的算法其实本质也是一种DP,而且是最经典的DP。
到底是怎么样的啊?
[/Quote]
绿色夹克衫
2009-08-20
打赏
举报
回复
转帖一个别人的吧
int MaxSum(int n,int *a)
{
int sum=a[0],b=0;
for(int i=0;i <n;i++)
{
if(b>0) b+=a[i];
else b=a[i];
if(b>sum) sum=b;
}
return sum;
}
[Quote=引用 10 楼 javadream11 的回复:]
引用 9 楼 litaoye 的回复:
O(n)的算法其实本质也是一种DP,而且是最经典的DP。
到底是怎么样的啊?
[/Quote]
javadream11
2009-08-20
打赏
举报
回复
[Quote=引用 9 楼 litaoye 的回复:]
O(n)的算法其实本质也是一种DP,而且是最经典的DP。
[/Quote]
到底是怎么样的啊?
绿色夹克衫
2009-08-20
打赏
举报
回复
O(n)的算法其实本质也是一种DP,而且是最经典的DP。
lingyun310
2009-08-20
打赏
举报
回复
这是个O(n)算法,只需要遍历一遍就可以了。。
showjim
2009-08-20
打赏
举报
回复
[Quote=引用 5 楼 fire_woods 的回复:]
最大子段和不需要BP,有O(n)的算法.
[/Quote]
是的,从左到右扫一次就行了(中间要记录差值)
lingyun310
2009-08-20
打赏
举报
回复
看你这个方程,应该是先建立的一个数组,b[j]记录a[0]到a[j]的和,然后在数组b中查找符合条件的子段。即最后的结果是其中的一个极大值-它前面的某个极小值。
但是这个算法做了改进,即,和是负值的时候,就不做记录,也就是说,把极小值全部取作了0,这样一来,只要查找极大值就可以了。。。
这个方程就是计算数组b用的。。。如果当前b[j]小于0,那么重新开始记录a[j],也就是说,此时,前面有一段子段的和为负了,而分析一下,这一段负和是不可能出现在和最大子段里面的。。。。具体过程比较复杂,不写了。。。自己好好思考一下,就能想通的。
fire_woods
2009-08-20
打赏
举报
回复
最大子段和不需要BP,有O(n)的算法.
PeacefulBY
2009-08-20
打赏
举报
回复
b[j]=max{a[i]++a[j]},1<=i<=j,且1<=j<=n,则所求的最大子段和为max b[j],1<=j<=n。
由b[j]的定义可易知,当b[j-1]>0时b[j]=b[j-1]+a[j],否则b[j]=a[j]。故b[j]的动态规划递归式为:
b[j]=max(b[j-1]+a[j],a[j]),1<=j<=n。
T(n)=O(n)
xiaoyu821120
2009-08-20
打赏
举报
回复
我觉得这题的递推式应该是
if(b[j-1]<=0)
b[j]=a[j]
else
b[j]=b[j-1]+a[j];
b[0] = a[0]
javadream11
2009-08-20
打赏
举报
回复
[Quote=引用 1 楼 peacefulby 的回复:]
把题描述下?
[/Quote]
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。
PeacefulBY
2009-08-20
打赏
举报
回复
把题描述下?
全球各国汇率、短长期、政策利率数据(1914-2024.3)
根据国际货币基金组织(IMF)等平台的数据,整理了全球各国的兑美元汇率,短期利率、长期利率、政策利率数据,时间范围最新至2024年3月,希望对大家有所帮助 一、数据介绍 数据名称:全球各国汇率、短长期、政策利率数据 数据范围:全球国家 样本数量:76403条 数据年份:1914-2024.3 数据说明:包含兑美元汇率、短期利率、长期利率、政策利率 更新时间:2024年3月 二、指标范围 单位 国家 年份 兑美元汇率-月度均值 兑美元汇率-年度均值 短期利率 长期利率 政策利率
YOLO算法实验室电子仪器电源状态目标检测数据集-60张-标注类别为关机状态-开机状态.zip
YOLOv11目标检测实战项目
样本--2026-2032
中
国舆情监控系统市场现状研究分析与发展前景预测报告--Wangliu.pdf
样本--2026-2032
中
国舆情监控系统市场现状研究分析与发展前景预测报告--Wangliu.pdf
pip-matplotlib-3.6.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.zip
pip-matplotlib-3.6.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.zip
【显示驱动技术】SSD2828QN4 MIPI主桥接芯片数据手册:支持高速串行接口与传统RGB并行接口转换,适用于移动显示设备
中
的图像数据传输应用
内容概要:SSD2828QN4是一款MIPI主桥接芯片,用于连接应用处理器与传统并行LCD接口及支持MIPI从属接口的LCD驱动器。该芯片支持最高每通道1Gbps的串行链路速度,最多可配置4个数据通道,显著减少了信号数量。它支持多种接口模式,包括RGB+SPI组合接口,适用于驱动智能或非智能显示面板,并能通过命令模式和视频模式传输数据。芯片内置时钟和复位模块、外部接口、协议控制单元(PCU)、包处理单元(PPU)、错误校正码/循环冗余校验(ECC/CRC)模块、长包和命令缓冲区、D-PHY控制器、模拟收发器以及内部锁相环(PLL),确保了高效的数据传输和系统稳定性。此外,文档详细描述了芯片的引脚分配、寄存器设置、操作模式、电源序列、时序特性等关键参数,为开发者提供了全面的技术指导。 适合人群:具备一定硬件设计基础,从事嵌入式系统开发、显示技术研究的研发人员。 使用场景及目标:①实现应用处理器与MIPI兼容显示屏之间的高速数据传输;②优化显示系统的功耗表现,减少电磁干扰(EMI);③通过灵活配置不同接口模式来适应各种显示设备的需求。 阅读建议:此文档面向具有一定电子工程背景的专业人士,建议读者结合实际项目需求深入理解各章节内容,特别是关于寄存器配置、时序要求等方面的具体说明。对于初次接触此类技术的开发者而言,建议先熟悉基本概念再逐步掌握高级功能的应用方法。
数据结构与算法
33,025
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章