HDOJ 1003 Max Sum 简单解题报告
动态规划经典题,求和,大于max则更新,小于0则将和置为0,重新求和。
因为笔者没有系统学过动态规划,所以一开始也是不会的。在网上看了大牛的解法后,算是明白了。贴上AC代码,就容易理解了。
#include <iostream> using namespace std; int main() { int cas,cas2,i,n,sum,max,a,b,num,begin; cin>>cas; cas2=cas; while(cas--) { sum=a=b=0; begin=1; max=-1001; cin>>n; for(i=0;i<n;i++) { cin>>num; sum+=num; if(sum>max) { max=sum; a=begin; b=i+1; } if(sum<0) { sum=0; begin=i+2; } } cout<<"Case "<<cas2-cas<<":\n"<<max<<' '<<a<<' '<<b<<endl; if(cas) cout<<endl; } }