【ACM】杭电OJ 1003。

运行环境VS2017 

题目链接:杭电OJ 1003

主要思想是:

用d[i]来存放前i项中最大的和,得到end,然后再倒推,得起始的位置begin

然而在程序42行的疑问,大家可以讨论一下吗????

#include <stdio.h>
#include <string.h>
int a[100000 + 11];
int d[100000 + 11];
int main()
{
	int N,n,i,end,begin,inf,sum,p;
	scanf_s("%d", &N);
	for (p = 1; p <= N;p++)
	{
		inf = -1999;
		memset(a, 0, sizeof(a));
		memset(d, 0, sizeof(d));
		scanf_s("%d", &n);
		for(i=1;i<=n;i++)
		{
			scanf_s("%d", &a[i]);
			if (a[i] + d[i - 1] > a[i])
			{
				d[i] = a[i] + d[i - 1];
			}
			else
			{
				d[i] = a[i];
			}
			if (d[i] > inf)
			{
				inf = d[i];
				end = i;
			}
		}
		sum = 0;
		for (i = end; i >= 1; i--)
		{
			sum += a[i];
			if (sum == inf)
			{
				begin = i;
			}
		}
		printf("Case %d:\n",p);
		printf("%d %d %d\n", inf, begin, end);//改成inf就是AC,改成sum就是WA????
		if (p != N)
		{
			printf("\n");
		}
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值