算法设计与分析——动态规划——最大字段和问题

最大字段和问题-(动态规划,分治法,简单算法)--C 问题描述:给定由n个整数(可能有负整数)组成的序列(a1,a2,…,an),最大子段和问题要求该序列形如 的最大值(1<=i<=j<=n),当序列中所有整数均为负整数时,其最大子段和为0。 1.简单算法 代码如下: #include<stdio.h> #include<stdlib.h> #define max 10 int MUL(int *p) {... 阅读详情

动态规划解决问题是自底向上。原问题的规模是n个元
素。这n个元素不好考虑,我们先考虑n-1个元素,这样还不好考
虑,我们考虑n-2个元素,这样依次递减,最后问题规模变成一个
元素。但是我们发现,在递减的过程中间,子问题的最优解包含
在原问题的最优解之中,而且子问题的解还有一些是重复的。
因此,使用动态规划来解决这个问题。

思想:
对字段序列进行一个循环,
如果之前的序列b>0,则加入这个新的序列之中;
如果之前的序列b<=0,则重新设置字段的序列和为nums[i];
如果之前的序列加上nums[i],的值大于之前的最大序列和,则更新最大序列和;
我们要写出一个递归方程。我们设置一个数组b来存放最优解,首先将b[1]=a[1],a存放的是我们的n个元素。第i个元素,他的状态就是将他放不放到数组b中(和之前的有些像)。因此,递归方程就是:b[i]=max{b[i-1]+a[i],a[i]}

#include<iostream>
using namespace std;

long long MaxSum(long long *nums,int n)
{
	long long sum=0;
	long long  b=0;//b是临时的字段和的数值 
	for(int i=0;i<n;i++)
	{
		if(b>0)
		{
			b=b+nums[i];
		}
		else
		{
			b=nums[i];
		}
		
		if(b>sum)//更新字段和值 
		{
			sum=b;
		}
	}
	
	return sum;
}
int main()
{
	cout<<"请输入字段的长度:";
	 
		long long  n;
	cin>>n;

	long long nums[n];
	cout<<"请输入字段序列(中间用空格隔开):";
	 
	for(int i=0;i<n;i++)
	{
		cin>>nums[i];
	} 
	cout<<"最大字段和为:"<<MaxSum(nums,n);
	return 0;
}

在这里插入图片描述

算法设计与分析(期末复习重点)更新中 第一章 算法的五大特性:输入、输出、可行性、有穷性、确定性 (1)输入:一个算法有零个或多个输入。 (2)输出:一个算法有一个或多个输出。 (3)可行性:算法描述的操作可以通过已经实现的基本操作执行有限次来实现(每步可执行)。 (4)有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。算法的有穷性 意味着不是所有的计算机程序都是算法。 (5)确定性:算法中的每一条指令必须有确切的含义,对于相同的输入只能得到相同的输出。 算法的复杂性:时间复杂性和空间复杂性 第二章 大O符号: 阅读详情

相关推荐

最大字段和问题

求一个n个数的最大字段和问题,以及对其进行输出。基本的贪心算法问题。常用与研究生算法课程。

最大子段和问题(3种方法)

给定由n个整数(可能为负整数)组成的序列a1,a2, a3… , an, 寻找它的某个连续子段,使得其和最大。例如( -2,11,-4,13,-5,-2 )最大子段是{ 11,-4,13 }其和为20。 1、最大字段和问题的简单算法 (1)枚举法求解: 以a[0]开始: {a[0]}, {a[0],a[1]},{a[0],a[1],a[2]}……{a[0],a[1],……a[n]}共n个 以a[1]开始: {a[1]}, {a[1],a[2]},{a[1],a[2],a[3]}……{a[1],a[2],……

weixin_44469806的博客 5万+

从零开始VCS+Verdi 安装过程

从零开始VCS+Verdi 安装及破解过程 主要参考:VCS+Verdi 安装及破解过程(CentOS7)-----FPGA开发 1. 安装文件结构 –vcs-mx_vL-2016.06 –verdi_vL-2016.06-1 –scl_v11.9 #此程序统一管理license等破解文件 –SynopsysInstaller.rar #此程序用于安装以上3个程序 –sc...

Ztrans的博客 2万+

3.4 最大字段和

当涉及到最大子段和问题时,可以使用动态规划算法来有效地解决。以下是最大子段和问题的动态规划算法的要点总结:1. 定义状态:我们可以使用一个一维数组 `dp` 来记录以每个位置结尾的最大子段和。`dp[i]` 表示以第 `i` 个位置结尾的最大子段和。2. 初始化状态:将 `dp[0]` 初始化为数组的第一个元素 `a[0]`。3. 状态转移:对于每个位置 `i`,我们有两种选择:- 要么将其加入之前的子段中,即 `dp[i] = dp[i-1] + a[i]`;

tang7mj的博客 2114

COMSOL实战:薄膜声学超材料模态分析全流程解析(含预应力设置技巧)

本文详细解析了使用COMSOL进行薄膜声学超材料模态分析的全流程,包括预应力设置技巧和共振频率优化方法。通过实际案例和参数设置指南,帮助工程师掌握从几何建模到结果解读的关键步骤,特别适合声学超材料和共振薄膜结构的设计与优化。

ujm5678901的博客 292

手把手用ROS实现Ego-Planner动态避障:无人机撞树问题终结方案

本文详细介绍了如何在ROS和Gazebo仿真环境中,通过配置和调优Ego-Planner算法,实现无人机的动态避障功能。文章深入解析了其基于局部梯度优化的核心思想,提供了从环境搭建、参数详解到代码集成的完整实践指南,并分享了实战排错经验,旨在彻底解决无人机在复杂动态场景中的碰撞问题。

weixin_29031161的博客 1630

动态规划之最大字段和

1、思路 最大字段和问题可以有三种解法: 1.穷举法 2.分治法 3.动态规划法 2、穷举法 穷举每一种可能,两到三层循环,既可以搞定。时间复杂度O(n2)或O(n3)。 private static int MaxSubSum(int[] aa) { int T,bestI=0,bestJ=0; int maxSum=aa[0]; for (int i = 0; i < aa.length; i++) { for (int j = i+1; j < aa.leng.

weixin_46957647的博客 2762

告别GitHub!手把手教你用Gitblit在Windows 10上搭建私人局域网Git服务器(附SourceTree配置)

本文详细介绍了如何在Windows 10环境下使用Gitblit搭建私有Git服务器,实现局域网内高效代码协作。通过轻量级的Gitblit解决方案,开发者可以享受数据完全自主、离线可用性和局域网高速访问等优势。文章包含从环境准备、安装部署到SourceTree配置的全流程指南,特别适合金融、医疗等敏感行业团队使用。

weixin_30430169的博客 281

头歌——算法设计与分析(动态规划)

给定一个长度为n的数组,找出一个最长的单调递增子序列(不一定连续,但是顺序不能乱)。例如:给定一个长度为7的数组A5,6,7,1,2,8,9,则其最长的单调递增子序列为5,6,7,8,9,长度为5。求318714101223411624的最长的单调递增子序列长度。,an, 求该序列的最大子段和。本关任务:编写用动态规划解决求最长的单调递增子序列长度问题。为了完成本关任务,你需要掌握:动态规划。为了完成本关任务,你需要掌握:动态规划。为了完成本关任务,你需要掌握:动态规划。

m0_73879806的博客 1945

【微信小程序开发与设计】垃圾智能分类小程序

垃圾分类是将来生活可持续发展的必需项。但是很多人由于缺乏垃圾分类知识,或是因为垃圾分类困难,费时费力,所以没有好好贯彻垃圾分类政策,此时设计一款方便于群众进行智能化垃圾识别分类的微信小程序就显得尤为必要。

Markelle_Fultz的博客 8245

【气候模式降尺度】分位数增量映射(QDM)原理及MATLAB代码实现

简介QDM原理及其MATLAB代码实现

WW、forever的博客 5861

DP算法之最大字段和 最长单调子序列相似借鉴之处

DP算法最大字段和 a[1...n] 找出连续子序列和最大的一个 (曹博的PPT里面看到的)DP算法 最长单调递增(递减)子序列 a[1...n] 找出未必连续的 最长的 单调递增子序列 dp[i]: 表示a[1...i]的最长单调递增子序列,由于是否加一个元素与之前解的最后一个元素大小有关,因此用j记录 dp[i-1]的最优解最后一个元素, dp[i]

richardzrc的博客搬家了--->richardzhang.info 1290

2020年大连理工大学《计算机控制技术》期末试卷

2020年大连理工大学《计算机控制技术》期末试卷 2020年大连理工大学《计算机控制技术》期末试卷 2020年大连理工大学《计算机控制技术》期末试卷 2020年大连理工大学《计算机控制技术》期末试卷 ...

无名何许人的博客 649

算法设计与分析 期末复习 北邮BUPT

算法设计与分析-2022

weixin_50212676的博客 2373

educoder实训——计算几何形状的表面积与体积

educoder python实训

qq_41234663的博客 1230

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

121. Best Time to Buy and Sell Stock

题目描述 121. Best Time to Buy and Sell Stock 难度简单1295 Say you have an array for which theithelement is the price of a given stock on dayi. If you were only permitted to complete at most one transaction (i.e., buy one and sell one share of the stock), d...

weixin_44238239的博客 131

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【算法-动态规划】-最大子段和

动态规划算法与分治法类似,其基本思想也是将待求解问题分解为若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适用与动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。 分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。递归的求解这些子问题,然后将各子问题的解合并得到原问题的解。 如果用分治法求解时,有些子...

fxkcsdn的博客 2万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

武汉理工大学计算机考研复试-算法与程序设计(绿皮书算法java实现)

算法与程序设计复试 经典算法设计与分析 递归 函数在运行是调用自身,并且一定要包含条件语句,在合适的时候终止递归 //2013年算一个M的N次方,要求用递归; public class recursion { public static void main(String[] args){ System.out.println(f(5,3)); } public static Integer f(int M,int N){ if(N==1){

qq_41291067的博客 937

求最大字段和问题(常规法,分治法,动态规划法)

算法设计与分析-----求最大字段和问题    问题描述:给定由n个整数组成的序列(a1,a2,a3......,an),求该序列的子段的最大值. 常规法: 从a1开始,求出以a1开头的子序列最大的和为sum,依次从a2开始,在sum等于以a1开头的基础上,与以a2开头的不同长度的子序列进行比较,取最大值,然后依次从a3,a4......an开头,最后得到最大子序列的和;

杨龙飞的博客 3322

poj1050(最大子矩阵和)

首先复习一下最大字段和: 一般有两种写法int dp(int sum[105],int k) { int i,b,max; max=sum[0]; b=sum[0]; for (i=1;i<k;i++) { if (b<0)//如果之前的和小于0 b=sum[i]; else b=b

fengsigaoju的博客 518

算法分析与设计——最大子段和(动态规划)

给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。 要求算法的时间复杂度为O(n)。 输入格式: 输入有两行: 第一行是n值(1<=n<=10000); 第二行是n个整数。 输出格式: 输出最大子段和。 输入样例: 在这里给出一组输入。例如: 6 -2 11 -4 13 -5 -2 输出样例: 在这里给出相应的输出。例如: ...

炸鸡和薯条的博客 1156

最大子段和

1 package digui_fenzhi; 2 3 //最大字段和 4 import java.util.Random; 5 import java.util.Scanner; 6 7 class SimpleAlgorithm//简单算法 8 { 9 int maxSum(int[] a) 10 { 11...

weixin_34217711的博客 88

C#学习笔记——分治算法

分治法的设计思想是: 将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 问题:求数列的最大字段和 股票问题 日期 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 价格 100 55 110 85 105 102 86 63 81 101 94 106 101 79 94 90 97 变化 -45 55 -25 20 -3 -16 -23 18 20 -7 12 -5 -22 15 -4 7 从0索引开始 数组中最

qq_43667985的博客 415

2024年春季学期《算法分析与设计》练习8

例如:输入数组(6,-1,5,4,-7),输出14, 1, 4,其中14表示最大子段和,1表示和最大的子段从第1个数字开始,4表示和最大的子段到第4个数字结束,即(6, -1 , 5, 4)。给定n个整数(可能是负数)组成的序列a[1], a[2], a[3], …, a[n],求该序列的子段和如a[i]+a[i+1]+…每组输入两行,第1行为数组中包含的整数个数n,第2行为n个整数(可能包含负整数),两两之间用空格隔开。输出最大子段和,以及和最大子段的起始位置和结束位置,两两之间用空格隔开。

zs_261的博客 470

【算法设计与分析】最大子段和问题

说明:这是武汉理工大学计算机学院【算法设计与分析】课程的第二次实验第一题:最大子段和问题 >>点击查看WUTer计算机专业实验汇总 谨记:纸上得来终觉浅,绝知此事要躬行。 一、实验题目: 给定由n个整数组成的序列(……),求该序列形如的子段和的最大值,当所有整数均为负整数时,其最大子段和为0。 二、实验要求: (1)分别用蛮力法、分治法和动态规划法设计最大子段和问题的...

拾年之璐 6755
上一篇: 算法设计与分析——分支限界法——布线问题
下一篇: 算法设计与分析——回溯法——01背包问题
943802606
博客等级 码龄6年 1万+粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值