【DP温习2】HDU 1003——Max Sum
【DP复习2】HDU 1003——Max Sum
题目:点击打开链接
这个问题是DP,但是不需要数组就可以做,应用startpos,endpos记录位置。tmp读数,now计算当前记录的和,判当前+读入的数是否小于读入的数,如果越读越小的话,那么就换一个位置,如果增大,说明对MAX是有利的,移动endpos就可以了,最后和maxsum进行比较。
附一组Trick数据:
5 -1 -2 -3 -4 -5答案是 -1 1 1.
#include <iostream> using namespace std; int main() { int testcase; cin>>testcase; for(int i=1;i<=testcase;i++) { int n,tmp,tp; int maxnum,startpos,endpos,tstart,now; cin>>n>>tmp; startpos=1; endpos=1; tstart=1; maxnum=tmp;//一定要临时在这里设置一个 now=tmp; for(int j=2;j<=n;j++) { cin>>tp; if(now+tp<tp) { now=tp; tstart=j; //临时标记的变量 } else { now+=tp; } if(now>maxnum) { maxnum=now; startpos=tstart; endpos=j; } } cout<<"Case "<<i<<":"<<endl; cout<<maxnum<<" "<<startpos<<" "<<endpos<<endl; if(i!=testcase) cout<<endl; } return 0; }