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;
}
= 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;
}
相关文章推荐
- HDU 1231:最大连续子序列(DP)
- HDU--1231 : 最大连续子序列 (DP求连续子序列最大和)
- HDU 1231 最大连续子序列 &&HDU 1003Max Sum (区间dp问题)
- HDU 1231 最大连续子序列 (DP)
- HDU 1231 最大连续子序列(dp)
- hdu 1231最大连续子序列 【DP】
- HDU 1231最大连续子序列dp入门
- HDU 1231 最大连续子序列 (DP)
- hdu 1231 最大连续子序列(DP)
- 最大连续子序列 (dp)HDU 1231
- HDU 1231 最大连续子序列 --- 入门DP
- HDU 1231 最大连续子序列(经典题目,DP)
- HDU 1231 最大连续子序列 &&HDU 1003Max Sum (区间dp问题)
- ACM_HDU 1231 最大连续子序列 (dp)_代码分析
- HDU 1231 最大连续子序列(dp)
- HDU ~ 1231 ~ 最大连续子序列(DP)
- HDU 1231 最大连续子序列 (DP)
- hdu 1231 最大连续子序列 DP
- HDU 1231 最大连续子序列(DP)
- hdu 1231 dp 最大连续子序列