杭电1003 Max Sum TLE

这一题目是要求连续子序列的最大和,所以在看到题目的一瞬间就想到的是把所有情况列举出来,再两个两个的比较,取最大的(即为更新最大值的意思),这样的思路很简单,但是会超时,时间复杂度为O(n^3),因为有三重for语句

#include<stdio.h>
#define maxn 101000
int main()
{
	int ncase,flag=1,n,max,sum=0,h,z,a[maxn];
	long i,j,k;
	scanf("%d",&ncase);
	while(flag<=ncase)
	{
		max=-1001;
		scanf("%d",&n);
		for(i=0;i<n;i++)
		{
			scanf("%d",&a[i]);
		}
		for(i=0;i<n;i++)
		{
			{
				for(j=i;j<n-1-i;j++)
				{
					sum=0;
					for(k=i;k<=j;k++)
					sum+=a[k];
					if(sum>max)
					{
					max=sum;
					h=i;
					z=j;
					}
				}

			}
		}
		printf("Case %d\n",flag);
		printf("%d %ld %ld\n",max,h+1,z+1);
		printf("\n");
		flag++;

	}
}

  

时间: 2024-10-19 03:00:29

杭电1003 Max Sum TLE的相关文章

杭电 1003 Max Sum

http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 142781    Accepted Submission(s): 33242 Problem Description Given a sequence a[1],a[2],a[3

杭电1003 Max Sum 【连续子序列求最大和】

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1003 题目意思: 即给出一串数据,求连续的子序列的最大和 解题思路: 因为我们很容易想到用一个max来存放找到的子序列的和中的最大值,通过不断比较,对max的值进行更新,最后我们就能够得到最大子序列的和,于是很容易想到用暴力搜索,见上一篇博客,这样的时间复杂度为O(n^3),是超时的. 又因为想到只要一个数不是负数,不管它再小,加上去也是会使和变大的,所以我们需要用另一个变量来判断即将要加上的一个

杭电ACM3415——Max Sum of Max-K-sub-sequence

一开始,看到这题,以为是最大连续子序列和的问题,写出了代码,提交了,WR,找了一些测试数据,结果发现这个算法并不能将所以的序列的解求出,只是满足一部分序列. 百度了一下,知道了要用单调队列来求解. 单调队列,也就是队列中必然是单调递减的或者递增的.而这题使用的是单调递增的队列. 单调队列使用的是双向队列,队尾队头都可以删除元素,只能从队尾插入元素. 比如求解一个数列{1  ,2  ,5 ,3, 4, 6}的最长的递增序列的长度. 首先,1入队,队列中有 1. 接下来2比1 大,2入队,队列为 1

杭电1003(Max Sum) 首次dp

点击打开杭电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 in this sequence is 6 + (-1) + 5 + 4 = 14. Input The first line of the inp

杭电 1003

Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 142647    Accepted Submission(s): 33192 Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max s

hdoj 1003 Max Sum 【最大子段和】【贪心】

题意:... 策略:看着像贪心,感觉也是贪心. 很久之前做的,又做了一遍,好题. 代码: #include<stdio.h> #include<string.h> int s[100005]; int main() { int t, i, j, l, st, en, n, v = 1; scanf("%d", &t); while(t --){ scanf("%d", &n); for(i = 1; i <= n; i

HDOJ 1003 Max Sum【MSS】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 158875    Accepted Submission(s): 37166 Problem Description Given a sequence a[1],a[2

最大子序列和 HDOJ 1003 Max Sum

题目传送门 1 /* 2 题意:求最大连续子序列和及两个端点 3 累积遍历算法 O(n):依照sum<0将序列分块,最值在某一块上产生.dp也是同样的思路:dp[i] = max (dp[i-1] + a[i], a[i]) 其实是一样的 4 1003就这么难?? 5 详细解释 6 */ 7 /************************************************ 8 * Author :Running_Time 9 * Created Time :2015-8-10

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 + 4 = 14. Input The first line of the input contains