【 OJ 】 HDOJ1003 动态规划最大子串 [ 4 ]

这题依旧是昨天做的一批中的WA一员,WA的自闭,虽然感觉写HDOJ蛮好玩的,WA的......难受一匹是吧....一样的跪求大神指正

思路也很简单就是动态规划,哨兵往下总和大于原来的sum,sunm就交换并且拿到哨兵的index,如果总和>=0有增加的可能就继续,如果总和<0就pass,从下一位继续.....

/*
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 + 4 = 14.

Input
The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow,
each line starts with a number N(1<=N<=100000), then N integers followed(all the integers are between -1000 and 1000).

Output
For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line contains three integers, 
the Max Sum in the sequence, the start position of the sub-sequence, the end position of the sub-sequence.
If there are more than one result, output the first one. Output a blank line between two cases.

Sample Input
2
5 6 -1 5 4 -7
7 0 6 -1 1 -6 7 -5


Sample Output
Case 1:
14 1 4

Case 2:
7 1 6

1
10 -5 -6 3 2 1 -7 6 3 -10 8

答案:9 7 8
1
10 9 -6 -7 3 2 1 -1 -1 -1 9
答案:12 4 10
*/

# include <iostream>
# define Num 100001
using namespace std;

int a[Num];
void out(int time,int sum,int s,int e) {
	cout << "Case " << time << ":" << endl;
	cout << sum << " " << s << " " << e << endl;
}
int addMax(int*a,int n, int *startIndex1, int*endIndex1) {
	*startIndex1 = *endIndex1 = 0;//重置0位置
	int sum = -999;
	int temp_Sum = 0;
	int tsindex, teindex;
	tsindex = teindex = 1;
	for (int i = 0; i < n; ++i) {
		temp_Sum = temp_Sum + a[i];//加上当前数字
		if (temp_Sum >= 0) {//有希望
			teindex = i+1;//如果有上升趋势那么临时end上去
			if (temp_Sum > sum) {
				sum = temp_Sum;
				*startIndex1 = tsindex;
				*endIndex1 = teindex;
			}
		}
		else {//已经负数没上升趋势了
			tsindex = i + 2;//当前坐标为 i 但是在1为开头是 i+1 所以下一个是 i+2
			teindex =tsindex;//当前坐标 i 一定是大负数
			temp_Sum = 0;
		}
	}
	return sum;
}
int main(void) {
	int n;//次数
	int N;//每次个数
	int startIndex=1, endIndex=1;
	int sum = 0;
	cin >> n;//次数
	if (n >= 1 && n <= 20) {
		for (int j = 0; j < n; ++j) {
			cin >> N;//确认录入数组个数
			if (N >= Num)//此行加上就不会出先运行时错误(真的烦)
				return 0;
			for (int i = 0; i < N; ++i) {
				cin >> a[i];
			}//对数组进行输入
			//对数组进行动态规划统计最大值,起始位置和终止位置
			sum = addMax(a, N, &startIndex, &endIndex);
			out(j + 1, sum, startIndex, endIndex);
			if (j != n - 1)
				cout << endl;
		}
	}
	else
		return 0;
	system("pause");
	return 0;
}

哪里错了.......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 智慧社区背景与挑战 随着城市化的快速发展,社区面临健康、安全、邻里关系和服务质量等多方面的挑战。华为技术有限公司提出智慧社区解决方案,旨在通过先进的数字化技术应对这些问题,提升城市社区的生活质量。 2. 技术推动智慧社区发展 技术进步,特别是数字化、无线化、移动化和物联化,为城市社区的智慧化提供了可能。这些技术的应用不仅提高了社区的运行效率,也增强了居民的便利性和安全性。 3. 智慧社区的核心价值 智慧社区承载了智慧城市的核心价值,通过全面信息化处理,实现对城市各个方面的数字网络化管理、服务与决策功能,从而提升社会服务效率,整合社会服务资源。 4. 多层次、全方位的智慧社区服务 智慧社区通过构建和谐、温情、平安和健康四大社区模块,满足社区居民的多层次需求。这些服务模块包括社区医疗、安全监控、情感沟通和健康监测等。 5. 智慧社区技术框架 智慧社区技术框架强调统一平台的建设,设立数据中心,构建基础网络,并通过分层建设,实现平台能力及应用的可持续成长和扩展。 6. 感知统一平台与服务方案 感知统一平台是智慧社区的关键组成部分,通过统一的RFID身份识别和信息管理,实现社区服务的智能化和便捷化。同时,提供社区内外监控、紧急救助服务和便民服务等。 7. 健康社区的构建 健康社区模块专注于为居民提供健康管理服务,通过整合医疗资源和居民接入,实现远程医疗、慢性病管理和紧急救助等功能,推动医疗模式从治疗向预防转变。 8. 平安社区的安全保障 平安社区通过闭路电视监控、防盗报警和紧急求助等技术,保障社区居民的人身和财产安全,实现社区环境的实时监控和智能分析。 9. 温情社区的情感沟通 温情社区着重于建立社区居民间的情感联系,通过组织社区活动、一键呼叫服务和互帮互助平台,增强邻里间的交流和互助。 10. 和谐社区的资源整合 和谐社区作为社会资源的整合协调者,通过统一接入和身份识别,实现社区信息和服务的便捷获取,提升居民生活质量,促进社区和谐。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值