HDOJ--1003Max Sum

本文探讨了利用动态规划和STL标准库中的vector容器解决最大子数组和问题的方法,通过代码实例展示了如何高效地寻找数组中的最大连续子数组和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

典型的求最大子数组和的问题,在前面的一篇文章中已经讨论过这个算法了.STL标准库为我们提供了一个更好操作的模版---vector, 相比数组, vector具有可动态增长的特点,不像数组一旦定义,空间就已经固定不变了。与我们可以用指针访问数组一样,我们使用迭代器(一种数据类型)来访问容器内的元素。所以A掉这个题目并不难,下面就是ac代码

#include <iostream>
#include <vector>
using namespace std;
using std::vector;

int Max_SubArray(vector<int>::iterator pia,int len,int *start_script,int *end_script) 
{
	int max_sum=0;  
    int i,flag=0;  
    int temp_sum=0;  
    int start=0,end;
	for(i = 0;i != len;++i)
	{ 
		if(temp_sum < 0)  
		{  
			temp_sum=pia[i];  
			end=i;
			start=i;
		}
		else  
		{  
			temp_sum += pia[i];  
			end=i;  
		}  
		if(temp_sum > max_sum)  
		{
				max_sum=temp_sum;  
				*start_script=start;  
				*end_script=end;  
		} 
	}
	if(max_sum==0)  
	{  
		max_sum=pia[0];  
		*start_script=0;
		*end_script=0;  
		for(i = 0;i != len;++i)  
		{  
			if(pia[i] > max_sum)  
			{  
				max_sum=pia[i];  
				*start_script=i;
				*end_script=i;  
			}  
		}  
    } 
	return max_sum;
}
int main()
{
	int ival;	 
	int len,n,ai;	 
	int start,end;
	int re,i,count=0,flag;
	cin>>n;
	flag=n;
	while(n--){	
		count++;
		vector<int> ivec;
		start=0;
		end=0;
		re=0;
		cin>>ival;
		for(i=0;i<ival;i++){
				cin >> ai;
				ivec.push_back(ai);
		}
		len=ivec.size();
		vector<int>::iterator iter = ivec.begin();//定义了一个迭代器类型变量iter,并且初始化指向ivec容器第一个元素
		re=Max_SubArray(iter,len,&start,&end);	//s,l以引用的形式传入函数,函数处理后返回相应值
		cout<<"Case "<<count<<":"<<endl;
		cout<<re<<" "<<start+1<<" "<<end+1<<endl;
		if(count != flag)
			cout<<endl;
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值