hdu1003 最大子序列的和

HDU(1003)动态规划 这道题虽然有很多种解法,但我一直尝试着用动态规划解,刚入门,用起来很不顺手,其中出现了很多错误,很多的意想不到,希望通过这道题,对动态规划能够更进一步的了解。 这道题是典型的也是动态规划中最简单的一道题,求最大子串和的问题。 第一步:分解出子问题。 本题的子问题是:dp[i] 代表前i个数中最大子串的和 ; 第二步:通过递归或递推求出子问题的最优解。 本题中的状态转移方程为:if ( d 阅读详情

题目大意:给出一串数字,求出子序列中的最大和。

思路:典型的dp问题,状态转移方程为:dp[i]=max{dp[i-1],dp[i-1]+a[i]}.设置start和end两个指标,用来记录结果子序列中的开始和结束的位置。

值得注意的是这道题目中的格式要求很多,一开始没太在意所以wrong answer 了好几次。

如下是第一次AC的代码:

# include <iostream>
# include <algorithm>
using namespace std;

int a[100005],dp[100005];

int main ()
{
	int total,t;
	int n,i,k,maxs,start,end;
	scanf("%d",&total);
	t=total;
	while(t--)
	{
		memset(a,0,sizeof(a));
		memset(dp,0,sizeof(dp));
		scanf("%d",&n);
		for(i=1;i<=n;i++)
		{
			scanf("%d",&a[i]);
		}
		dp[1]=a[1];
		maxs=dp[1];
		k=start=end=1;
		for(i=2;i<=n;i++)
		{
			if((dp[i-1]+a[i])<a[i])
			{
				dp[i]=a[i];
				k=i;
			}
			else
				dp[i]=dp[i-1]+a[i];
			if(dp[i]>maxs)
			{
				maxs=dp[i];
				start=k;
				end=i;
			}
		}
		printf("%s%d:\n%d %d %d\n","Case ",total-t,maxs,start,end);
		if(t)
		printf("\n");
	}
	//system("pause");
	return 0;
}

之后尝试了下改进,代码如下。因为从上面的循环中可以看出,其实两个数组并没有什么用,完全可以用一个变量来替代,这样就需要在读入数据的同时做处理,边度数据,边累加处理。

# include <iostream>
# include <algorithm>
using namespace std;


int main ()
{
	int total,t;
	int n,i,k,maxs,start,end,sum,a;
	scanf("%d",&total);
	t=total;
	while(t--)
	{
		scanf("%d",&n);
		scanf("%d",&a);
		start=end=k=1;
		maxs=sum=a;
		for(i=2;i<=n;i++)
		{
			scanf("%d",&a);
			sum=sum+a;
			if(sum<a)
			{
			    sum=a;
				k=i;
			}
			if(maxs<sum)
			{
				maxs=sum;
				start=k;
				end=i;
			}
		}
		printf("%s%d:\n%d %d %d\n","Case ",total-t,maxs,start,end);
		if(t)
		printf("\n");
	}
	system("pause");
	return 0;
}


贪心策略解决最大子序列和问题(java,附HDU_1003AC代码) 用贪心的思路来解决,从第一个元素开始,每次选择最大的,线性时间内完成 时间复杂度:O(N); 空间复杂度:O(1); 核心代码: for (int i = 1; i < nums.length; i++) { curSum = Math.max(curSum + nums[i], nums[i]); maxSum = Math.max(curS... 阅读详情

相关推荐

HDU1003-最大总和-DP

问题描述 给定序列a [1],a [2],a [3] ...... a [n],你的工作是计算一个子序列的最大和。例如,给定(6,-1,5,4,-7),这个序列的最大和为6 +(-1)+ 5 + 4 = 14。   输入 输入的第一行包含一个整数T(1 然后是T行,每行以数字N(1   输出  对于每个测试用例,你应该输出两行。第一行是“

小菜汪的小窝 1365

HDU-1003(简单动态规划)

题目链接这是一道简单的动态规划问题。题目意思即为求最大的子序列和。可将数据储存在一个数组中,然后对其进行处理。思路:数组为dp[n],即有n个数据。先假设max-sum = dp[0],并记录初始位置,末位置,和定义一个变量记录初始位置。采用一个n次的循环。循环内的操作为(如果此时循环变量为 i) : 如果dp[i-1] &gt; 0 ,dp[i] = dp[i] + dp[i-1],(具有记录字...

Alibaba_lhl的博客 2912

深入解析SGLang框架:从架构设计到核心组件实现

本文深入解析了SGLang框架的架构设计与核心组件实现。SGLang是一个专为大语言模型推理设计的高效框架,其核心优势在于清晰的分层架构、高效的调度策略以及精细的内存管理。文章详细剖析了其客户端接入、服务器端调度、模型执行引擎及Tokenizer/Detokenizer管理器等关键组件,揭示了其实现高性能推理的内部机制。

coffee的博客 575

线性DP入门笔记(6)最大总和 HDU-1003

​​​​对每组数字进行整理时,设置一个足够大的dp[]数组,每个数组用于存储到此点的最大总和,用一个b[]数组来记录此点形成最大总和的初始点,用info[][]二维数组储存每组需要输出的数据。DP状态转移方程dp[i]=dp[i-1]+a[row][i](dp[i-1]>=0)记录每点形成最大和,.........

m0_62102955的博客 320

3D点云处理:PointNet++与PointTransformer的对比

摘要: 3D点云处理中,PointNet++和PointTransformer是两种主流深度学习模型。PointNet++通过分层采样和分组策略提取局部特征,而PointTransformer利用自注意力机制捕捉全局上下文。实验表明,PointTransformer在分类(ModelNet40准确率92.1%)和分割(ShapeNet mIoU 85.7%)任务上性能更优,但计算开销较大(训练时间180秒/轮)。PointNet++在实时性场景更具优势(训练时间120秒/轮)。未来可结合两者优势,或优化Tr

shejizuopin的博客 1117

随机子空间集成方法原理与scikit-learn实践

集成学习通过组合多个基学习器的预测结果来提升模型性能,是机器学习中的核心方法之一。随机子空间方法作为集成学习的重要变体,其核心原理是通过对特征空间进行随机子采样来增加模型多样性。这种方法特别适合处理高维数据,能有效缓解维度灾难问题,常与决策树、K近邻等对特征选择敏感的基学习器配合使用。在scikit-learn中,可以通过BaggingClassifier和BaggingRegressor实现随机子空间集成,关键参数包括max_features和n_estimators。实际应用中,该方法在金融风控、医疗诊

weixin_33773084的博客 376

hdu1003:(dp解决查找最大的连续的子序列和)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 题目描述: 就是给你一个数组,需要你找出最大的连续子序列的和,和起始位置 如:(6,-1,5,4,-7),这样一个数组,最大的连续子序列就是6+(-1)+5+4=14,起始点为:1,结束点为:4,故输出14,1,4 然后我这里再说几个特殊的例子: 0 6 0 输出的是6 1 2 6 -1 1 输...

zhoupingqi2017的博客 583

深入解析SerDes系统中的时钟数据恢复电路(CDR)——基于Cadence的PLL/Bang-Bang/PS-PI架构实现与仿真

本文深入解析SerDes系统中的时钟数据恢复电路(CDR),重点探讨基于Cadence平台的PLL、Bang-Bang和PS-PI三种架构的实现与仿真。通过详细的技术对比和工程实践案例,揭示CDR在高速串行通信中的关键作用,并提供TSMC 28nm工艺下的优化策略与故障排查经验,助力工程师应对10Gbps以上SerDes设计挑战。

weixin_29202687的博客 249

HDU1003 Max Sum 最大子序列和的问题【四种算法分析+实现】

就拿杭电OJ上的第1003题开始吧,这题比原书要复杂一些。 Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum

长风的专栏 4881

位置点位到达判断FC(Easy+Codesys+博途平台)

IN rActPositon REAL 轴当前实际位置 1IN arAbsPosition REAL[10] 各工作点位坐标 2IN rDeadZone REAL 位置达到判断域值 范围 3OUT abInAbsPos BOOL[10] 到达各绝对定位点位标志 位置到达输出 4VAR i INT 循环计数 5VAR rErr REAL 位置偏差 6。

RXXW_Dor的博客 531

4、高级认证解决方案:Active Directory、LDAP、RADIUS和TACACS+深度解析

本文深入解析了多种高级认证解决方案,包括Active Directory、标准LDAP、RADIUS和TACACS+,涵盖其技术优势、配置步骤及适用场景。同时介绍了如何实现通用用户管理,包括使用第三方认证解决方案和ADSI自助用户管理。通过实际案例部署,展示了如何高效、安全地管理大规模用户认证与权限控制,为企业安全架构提供参考。

o4p5q6r7s的博客 302

【最大连续子序列和dp】hdu 1003 Max Sum

http://acm.hdu.edu.cn/showproblem.php?pid=1003 最大连续子序列和,dp[i] = max(dp[i-1]+a[i],a[i]),注意维护st /* hdu 1003 最大连续子序列和 dp 题意: 给你n个数,找到最大的连续子序列,使得和最大,且能输出它的起始、终止位置 思路: dp[i] = max(dp[i-1]+a[i],a

Hacker_vision 717

使用STM32H7点亮RGB屏幕

希望本文能对你有所帮助!RGB屏幕是一种具有红、绿、蓝三种颜色通道的显示设备,通过控制每个通道的亮度,可以显示出丰富多彩的图像和动画。要使用STM32H7控制RGB屏幕,我们需要连接适当的引脚,并编写适当的代码来控制每个颜色通道的亮度。在主循环中,我们先点亮红色通道,然后延迟一段时间,接着点亮绿色通道,再延迟一段时间,最后点亮蓝色通道,并再次延迟。需要注意的是,示例代码中的延迟循环使用了一个简单的计数器实现,但实际应用中可能需要更精确的延迟方式,例如使用定时器中断或操作系统提供的延迟函数。

QoyOle的博客 923

HDU 1003——Max Sum【最大子序列和】

题目传送门 Problem Description Given a sequence a[1],a[2],a[3]…a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 ...

NIRVANA REBIRTH 342

Linux 下 OpenClaw 安装全记录:从零到一的保姆级图文教程

本文主要介绍了Linux 下 OpenClaw 安装全记录:从零到一的保姆级图文教程,希望能对学习使用OpenClaw 的同学们有所帮助。 文章目录 1. 背景 2. 实战教程 2.1 步骤一 安装Node.js 2.2 步骤二:安装git 2.3 步骤三:安装并配置OpenClaw 2.4 步骤四:配置OpenClaw 2.5 步骤五:配置模型 2.6 步骤六:对话 3. 后续使用步骤 4. 报错解决方案 5. OpenClaw的卸载

weixin_43178406的博客 10万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

hdu 1003 1231 最大连续子序列的和

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 就是典型的最大连续子序列的和,我校赛初赛时发现我还不会这个,赶紧回来学习一下,应该算是入门级的dp吧。 题目的大意就是说,在一个序列之中,需要找出这个序列中连续的子序列,其各个数的和是整个数列里面最大的。 对于每一个数来是说都只有取和不取的两种状态,如果加上这个数之后比最大的和大那就要取,用s

liujc_的专栏 584

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

HDU1003(最大连续子序列和DP)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 解题思路: d[i] = max( d[ i - 1] + a[i] , a[i])。d[i]为从1到 i 的子序列的最大和,首先枚举记录出整个序列的最大和与结束点,然后再找到起始点即可。 如果1到 i- 1 的最大和为负,那么d[i] = a[i] ;否则,d[i] = d[i

代码艺术的道与术 1405

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

HUD 1003/HDU 1081:动态规划之最大子序列和+最大矩阵和

最大子序列和:HDU 1003 Max Sum 用动态规划的思想,求解前i个数能获得的最大和,当sum 如果sum > ans则更新ans和起点、终点。 //Must so #include #include #include #define mem(a,x) memset(a,x,sizeof(a)) #define sqrt(n) sqrt((double)n) #define pow(

Must so 780

Max Sum(HDU 1003) && 最大连续子序列(HDU 1231)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 代码: #include <iostream> #include <cstdio> #include <algorithm> #include <queue> #include <cmath> #include <cstring&...

L_X_ 182

HDU 1003 动态规划最大子序列和

** HDU 1003 动态规划最大子序列和 ** #include &lt;iostream&gt; using namespace std; int main() { int n; cin &gt;&gt; n; int a[100001]; for(int i = 0; i &lt; n; i++) { int N; ...

weixin_41399401的博客 209

hdu1003最大子序列和

看了一些别人的题解,说实话,我现在还不会证明这个,我不知道为什么这样是最大值 //hdu1003最大连续子序列和 // sum[i] = sum[i-1]>0 ? sum[i-1]+a[i]:a[i]; //只有当sum处于增长状态时才会得到最大子序列 //当sum处于减小状态时,应当更新起点 #include using namespace std; #define MAX 10000

枯荣 787

hdu 1003 最大连续子序列和及起始位置 && hdu 1087 最大上升子序列和

hdu 1003 题意:求最大连续子序列和及起始位置 对于动态规划问题要找出其子问题 考虑到dp的无后效性,dp[i]表示以i为结尾的最大值 当dp[i-1]>=0时,以i-1为值对以i为结尾的值有贡献,否则起始位置变为自己 动态地更新最大值 开头和结尾 #include<cstdio> #include<cstring> #include<al...

iroy33的博客 356

hdu 1003 求最大子序列和

http://acm.hdu.edu.cn/showproblem.php?pid=1003 #include #include using namespace std; int main() { int i,j,k,n,m,t; int a ; scanf("%d",&t); for(j=1;j<=t;j++) { scanf("%d",&n)

243

HDU 1003 Max Sum(求序列最大子序列和)

HDU 1003  Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 170306    Accepted Submission(s): 39737 Problem Description Given a seq

Spectacules的博客 595

HDU1003 最大子序列和问题

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#include iostream> #include vector> 

1345

HDU 1003 最大子序列和

这道题有两种做法 原题如下: 题目大意: 给你n个无序的数,求出最大的字序列的和及其对应的下标; 例如:6 -1 5 4 -7 最大的子序列和不就是6±1+5+4=14;从1开始到4结束; emmm就是这个意思; 那么怎么做呢 先介绍比较冗长一点的做法,就是用分治法,将问题划分为三个部分,左半边的最大子序列和,右半边的最大子序列和,中间部分的最大子序列和,这三者的最大值就是答案啦。 这个问题对于...

weixin_45460987的博客 158
上一篇: hdu1087
下一篇: hdu1069
fyy607
博客等级 码龄13年 1粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值