您的位置:首页 > 其它

HDU 1231 最大连续子序列 dp

2010-12-14 20:43 295 查看
//状态方程为c
= max(c[n-1]+a
, a
)
//c[0] = a[0]
#include <iostream>
#include <stdio.h>
#define MAX 10005
using namespace std; int main()
{
int a[MAX];
int c[MAX];
int hold_start[MAX]; //保存起始点
int n; while (cin >> n && n)
{
for (int i = 0; i < n; i++)
scanf("%d", &a[i]); c[0] = a[0];
hold_start[0] = a[0]; for (int i = 1; i < n; i++)
{
if (a[i]+c[i-1] > a[i])
{
c[i] = c[i-1]+a[i];
hold_start[i] = hold_start[i-1];
}
else
{
c[i] = a[i];
hold_start[i] = a[i];
}
} int _max = c[0]; for (int i = 1; i < n; i++)
_max = max(_max, c[i]); if (_max < 0)
cout << "0 " << a[0] << " " << a[n-1] << endl;
else
{
for (int i = 0; i < n; i++)
if (c[i] == _max)
{
cout << _max << " " << hold_start[i] << " " << a[i] << endl;
break;
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: