首页 > 代码库 > [HDU 1003]Max Sum
[HDU 1003]Max Sum
题目:最大子序列求和
#include <cstdio>
using namespace std;
const int max = 100000 + 10;
int tt;
void OutAns(int c,int ans,int beg,int end)
{
printf("Case %d:\n",c);
printf("%d %d %d",ans,beg,end);
if(c != tt)printf("\n\n");
else printf("\n");
}
int main()
{
int t;
int c = 0;
scanf("%d",&t);tt = t;
while(t--)
{
c++;
int date,e,n;
int f = 0,now = 0,b = 1,b1=1,M = -20000;
scanf("%d",&n);
for(int i = 1;i <= n;i++)
{
scanf("%d",&date);
now += date;
if(now > M)
{
M = now;
e = i;
b = b1;
}
if(now < 0)
{
b1 = i+1;
now = 0;
}
}
OutAns(c,M,b,e);
}
return 0;
}
PS 1. 注意时间复杂度的问题。开始时n^2 T了 然后才想到还有这个方法
2.注意前后的关联性,什么时候更新答案。
3.被学长吐嘈代码难看。。。好吧,确实不是很好看,慢慢改吧。。。
[HDU 1003]Max Sum