hdu 1003 最大总和 (dp)

 
  
问题描述
给定序列a [1],a [2],a [3] ...... a [n],您的工作是计算子序列的最大和。例如,给定(6,-1,5,4,-7),此序列中的最大和为6 +(-1)+ 5 + 4 = 14。
 
输入
输入的第一行包含一个整数T(1 <= T <= 20),这意味着测试用例的数量。然后是T行,每行以数字N开始(1 <= N <= 100000),然后是N个整数(所有整数都在-1000和1000之间)。
 
产量
对于每个测试用例,你应该输出两行。第一行是“Case#:”,#表示测试用例的编号。第二行包含三个整数,序列中的最大和,子序列的起始位置,子序列的结束位置。如果有多个结果,则输出第一个结果。在两种情况之间输出一个空行。
 
示例输入
25 6 -1 5 4 -7
7 0 6 -1 1 -6 7 -5
示例输出
情况1:14 1 4
案例2:7 1 6
	#include<stdio.h>
	#include<math.h>
	#include<string.h>
	#include<algorithm>
	using namespace std;
	int a[100006]={0};
	int main()
	{
	
		int t;
		scanf("%d",&t);
		for(int w=1;w<=t;w++)
		{
			int n;
			int maxn=-10000,xx=1,yy,e=1,temp=0;
			scanf("%d",&n);
			for(int i=1;i<=n;i++)
			{
				scanf("%d",&a[i]);
				temp+=a[i];	
				if(temp>maxn)
				{
					
					xx=e;yy=i;maxn=temp;
					
				}
				if(temp<0)
				{
					e=i+1;temp=0;
				}
			}
		    
			printf("Case %d:\n",w);
			printf("%d %d %d\n",maxn,xx,yy);
			if(w!=t)
			{
				printf("\n");
			}
		}
		return 0;
	}


猜你喜欢

转载自blog.csdn.net/liuliu2333/article/details/80586802