————————————————————————动态规划——————————————————————1003——————————
// 出现了三个问题,1 忘了写等号。2,max写成了sum,3,begin写成了again。 诡异的事情,没有写等号的话,会出现a读取错数字的情况。呵呵你所谓诡异的超神奇现象就是少写了一个等号,导致每一次都少都去一个零上一次没有用到的数据占了下一次第一个数据的位置 //导致了惨案的发生 #include<stdio.h> int main() { int n,m,i,sum,a,q,begin,over,again,max; scanf("%d",&n); for(q=1;q<=n;q++) { scanf("%d%d",&m,&a); // 读取 序列长度,和序列首位数字。 sum=max=a; // 将他们的最大值,和,都初始化为首位数字。 begin=over=again=1; for(i=2;i<=m;i++) { scanf("%d",&a); if(sum+a<a) //如果符合的话 就说明sum小于零,这样的话 就需要重新开始计数,和相加了(舍弃前面的不合格部分) { sum=a; again=i; } else { sum=sum+a; } if(sum>max) { max=sum; over=i; } } if(q!=1) printf("\n"); printf("Case %d:\n",q); printf("%d %d %d\n",max,begin,over); } }
头疼,是不是水题做的太少了导致经常会犯这种小错误?