[求教]杭电ACM 1003题 MAX SUM

[复制链接]
查看11 | 回复3 | 2010-7-22 11:24:52 | 显示全部楼层 |阅读模式
#include
int main()
{int n,a[100000],i,j,t,k,nn,lef,rig,max,sum;
scanf("%d",&n);
for(nn=1;nnmax) {max=sum;rig=k+1;}

}

sum=0;max=0;

for(k=rig-1;k>=0;k--)

{sum+=a[k]; if(sum>=max) {max=sum;lef=k+1;}


}

printf("Case %d:\n",nn);

printf("%d %d %d",max,lef,rig);

if(nn!=n) printf("\n\n");


}


return 0;
}
不知道错在哪请高手指点 感激不尽
http://acm.hdu.edu.cn/showproblem.php?pid=1003

回复

使用道具 举报

千问 | 2010-7-22 11:24:52 | 显示全部楼层
我也想了半天才想明白……你的核心算法有问题我们举例说明-1 -3 2 -4 -5按题目要求应该输出 2 3 3 对吧但是你的程序根本找不到lef和rig,因为从左往右没有某个和大于0然后,我把两处max=0修改为max=-2147483648提交,仍然是WA,应该是还有别的问题比如,-2 -4 -5 -1 -4这个数列,题目的输出应该是-1 4 4 但是显然这个程序无法处理全是负数的数列,故应将此情况单独考虑。解决方案:另外定义flag,读入a[j]前令flag=0,一旦读到一个正数令flag=1.到了下面,如果flag=1则正常执行你写的这部分程序,如果flag=0执行另一段单独考虑负数的程序即可。另外,看你好像是
回复

使用道具 举报

千问 | 2010-7-22 11:24:52 | 显示全部楼层
int 最多能定义65535a[100000]太大了~~
回复

使用道具 举报

千问 | 2010-7-22 11:24:52 | 显示全部楼层
想实现什么功能
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行