HDOJ1003
MAX —sum 好久前做过 但是再看到的时候觉得的有点陌生
设Si是一定以i结尾的最大连续子序列
S1=a[1];
Sn=Sn-1>=0?Sn-1+a[n]:a[n];//状态转移大致是这样 则S1 —Sn中必有所求子序列 边存边比较 答案就出来了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include<stdio.h> int main() { int a,P,n,start,temp,max,end,sum,mark=0; scanf ( "%d" ,&P); while (P--) { max=-1000,temp=1,sum =0; scanf ( "%d" ,&n); for ( int i=1;i<=n;i++) { scanf ( "%d" ,&a); sum+=a; if (sum>max) { max=sum; start=temp; end=i; } if (sum<0) { sum=0; temp=i+1; } } printf ( "Case %d:\n%d %d %d\n" ,++mark,max,start,end); if (P!=0){ printf ( "\n" ); } } return 0; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步