您的位置:首页 > 其它

hdu1231

2015-07-27 21:58 429 查看
dp

#include <iostream>

#include <string>

#include <algorithm>

#include <cstdio>

#include <vector>

#include <map>

#include <iterator>

#include <cstring>

#include <cmath>

using namespace std;

int num[10005];

typedef struct {

int sum, first, last;

} rcrd;

rcrd dp[10005];

int main() {

int n;

while (cin >> n && n) {

memset(dp, 0, sizeof(dp));

for (int i = 0; i < n; i++) {

scanf("%d", num+i);

dp[i].sum=num[i];

dp[i].first=dp[i].last=i;

}

for (int i = 1; i < n; i++) {

if (dp[i-1].sum + num[i] >= num[i]) {

dp[i].sum = dp[i-1].sum + num[i];

dp[i].first = dp[i-1].first;

dp[i].last = i;

}

}

int mv = dp[0].sum;

int midx = 0;

for (int i = 1; i < n; i++) if (dp[i].sum > mv) { mv = dp[i].sum; midx = i; }

if (mv >= 0)

printf("%d %d %d\n", dp[midx].sum, num[dp[midx].first], num[dp[midx].last]);

else

printf("%d %d %d\n", 0, num[0], num[n-1]);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: