HDU 1003 Max Sum
来源:互联网 发布:淘宝网医用输液瓶口贴 编辑:程序博客网 时间:2024/06/05 15:50
//简单DP,状态转移方程:dp[i] = max( a[i], a[i]+dp[i-1] )#include <iostream>#include <cstring>#include <cmath>using namespace std;int a[100005];int main(){ int t, n, cnt=0; cin >> t; while (t--) { cin >> n; int i; for (i=0; i<n; i++) cin >> a[i]; //start = max(a[i], a[i]+start); //maxsum = (maxsum, start); int start=a[0], maxsum=a[0], begin=0, end=0, pos=0; for (i=1; i<n; ++i) { if (start+a[i]<a[i]){ start = a[i]; pos = i; //变化的位置 } else start += a[i]; if (start > maxsum) { maxsum = start; end = i; begin = pos; //当end变化时,begin才能变化 } } cout << "Case " << ++cnt << ":" << endl; cout << maxsum << " " << begin+1 << " " << end+1 << endl; //最后貌似没有换行了,刚刚做其他的题PE了,这回写上直接A了,不知道直接换2行对不对。。。 if (t != 0) cout << endl; } return 0;}