hdoj 1003不知道为什么一直WA
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1003
求最大子序列和的问题:
#include <stdio.h> int main() { int ids,i,j,len; int b[100002],max,s,e; //max最大和,s开始位置,e终止位置 int a[100002]; scanf("%d",&ids); for(i=1;i<=ids;i++){ //输入数组 scanf("%d",&len); for(j=0;j<len;j++){ scanf("%d",&a[j]); } //DP方程 B[j] = max(B[j-1]+A[j], A[j]) b[0]=a[0];s=e=0;max=b[0]; for(j=1;j<len;j++){ if(b[j-1]+a[j]<a[j]){ b[j] = a[j]; s = j; } else { b[j] = b[j-1]+a[j]; } if(b[j]>max){ max = b[j]; e = j; } } printf("Case %d:\n", i); printf("%d %d %d", max<-1000?-1000:max,s+1,e+1); if(i==ids) printf("\n"); else printf("\n\n"); } return 0; }
#include <stdio.h> int main() { int ids,i,j,len; int b[100002],max,s,e; //max最大和,s开始位置,e终止位置 int x;//加 int a[100002]; scanf("%d",&ids); for(i=1;i<=ids;i++){ //输入数组 scanf("%d",&len); for(j=0;j<len;j++){ scanf("%d",&a[j]); } //DP方程 B[j] = max(B[j-1]+A[j], A[j]) b[0]=a[0];s=e=0;max=b[0]; x = 0;//加 for(j=1;j<len;j++){ if(b[j-1]+a[j]<a[j]){ b[j] = a[j]; x = j; //改 s = j; } else { b[j] = b[j-1]+a[j]; } if(b[j]>max){ max = b[j]; s = x;//加 e = j; } } printf("Case %d:\n", i); printf("%d %d %d", max<-1000?-1000:max,s+1,e+1); if(i==ids) printf("\n"); else printf("\n\n"); } return 0; }