当前位置: 首页 > news >正文

算法设计与分析算法实现——动态规划最大子段

输入:整数序列a1,a2,…,an
输出:序列的一个子段,其和Σak最大
注意:当所有整数都为负数时,定义最大子段和为0

使用动态规划,输入数组是a[n];
状态转移方程dp[i]=max(dp[i-1]+a[i],a[i])——这个状态方程可以发现,使得满足“连续”这一要求的重点在于每个dp[i]都包含了当前元素a[i];
使用两个数组start,end分别记录dp[i]的起始数组元素下标start[i]和dp[i]的终止数组元素下标end[i]——方便最后可以最大子段的每个元素;
使用max记录dp[i]的最大值,maxi_i记录下标;

//dp[i]=max{dp[i-1]+a[i],a[i]}
#include<iostream>
#include<vector>
using namespace std;
#define MAX  100000
int main() {int dp[MAX];//dp[i]表示前i的数(包含a[i])的最大子段和int a[MAX];vector<int>start,end;//start[i],end[i]记录dp[i]的起始下标和终止下标int n;//数组a的长度cin >> n;bool flag = 0;//判断数组元素是不是全非正数for (int i = 0; i < n; i++) {cin >> a[i];if (a[i] > 0)//数组元素存在正数flag = 1;}if (flag == 0) {//如果数组a所有元素都是非正数,则输出0cout << 0 << endl;return 0;}dp[0] = a[0];//初始化dp[0],start[0],end[0]start.push_back(0);//end.push_back(0);//int max = 0xffffffff;//记录dp[i]的最值int max_i;//记录使得dp[i]取得最值的下标ifor (int i = 1; i < n; i++) {if (dp[i - 1] + a[i] > a[i]) {//状态转移方程dp[i] = dp[i - 1] + a[i];start.push_back(start[i - 1]);//随dp[i]更新start数组}else {dp[i] = a[i];start.push_back(i);}end.push_back(i);//随着dp[i]更新end数组if (dp[i] > max) {//寻找最大dp[i]max = dp[i];max_i = i;}}for (int i = start[max_i]; i <= end[max_i]; i++) {//输出最大子段cout << a[i] << " ";}return 0;
}
http://www.lryc.cn/news/238418.html

相关文章:

  • JavaWeb-JVM内存管理机制
  • 阿里云oss存储文件上传功能实现(保姆级教程)
  • centos7配置 局域网自动解析hostname
  • wireshark 过滤设置
  • SpringBoot-过滤器Filter+JWT令牌实现登录验证
  • VMware——WindowServer2012R2环境安装mysql5.7.14解压版_互为主从(图解版)
  • python 实现蚁群算法(simpy带绘图)
  • OpenAI 董事会宫斗始作俑者?一窥伊尔亚·苏茨克维内心世界
  • Android App 启动状态有几种?
  • Spring Cloud Alibaba Sentinel 简单使用
  • nvm切换node后,没有npm
  • Redis-高性能原理剖析
  • ORA-00600 【3948】,ORA-00600 【3949】
  • flink 查看写入starrocks的数据量 总行数
  • 全链路压测的步骤及重要性
  • 使用Python实现几种底层技术的数据结构
  • 前端面试题【72道】
  • OpenGL 绘制文本(QPainter)
  • windows电脑连接Android和iPhone真机调试
  • windows上 adb devices有设备 wsl上没有
  • 释放搜索潜力:基于Docker快速搭建ES语义检索系统(快速版),让信息尽在掌握
  • JS--localStorage设置过期时间的方案(有示例)
  • JNPF开发平台凭什么火?
  • 关于“计算机中由于找不到msvcr120.dll,无法继续执行代码5种解决方法
  • LR学习笔记——基本面板
  • Cloud 微服务
  • 若依前后端分离版,快速上手
  • Java-抽象类、抽象方法
  • 南京--ChatGPT/GPT4 科研实践应用
  • 【VRTK】【VR开发】【Unity】7-配置交互能力和向量追踪