HDU--dp练习--1003--最大连续子序列
来源:互联网 发布:windows平板系统下载 编辑:程序博客网 时间:2024/06/05 05:19
题目:
6-2 11 -4 13 -5 -210-10 1 2 3 4 -5 -23 3 7 -2165 -8 3 2 5 01103-1 -5 -23-1 0 -20
20 11 1310 1 410 3 510 10 100 -1 -20 0 0
原题一堆乱码……其实就是求最大连续子段和。并要求输出最大和以及其起止元素。
若元素均为负数,则输出其起止元素。
解题思路:
源代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int num[10005],i,dp[10005],n,maxl[10005],maxr[10005],ma;//maxl和maxr用于记录每段和的起止元素
while (cin >> n)
{
int flag = 0;
int j = 1;
if (n == 0)
break;
memset(num, 0 , sizeof(num));
memset(dp, 0 , sizeof(dp));
memset(maxl , 0, sizeof(maxl));
memset(maxr, 0 , sizeof(maxr));
for (i = 1; i <= n; i++)//首先判断元素是否均为负数。
{
cin >> num[i];
if (num[i] >= 0)
flag = 1;
}
if (flag == 0)
{
cout << 0 << " " << num[1] << " " << num[n] << endl;
continue;
}
dp[0] = 0;
// dp[1] = num[1];
// maxl[1] = dp[1];
// maxr[1] = dp[1];
for (i = 1; i <= n; i++)//求最大连续子段和,并标记其起止位置的元素。
{
dp[i] = max (dp[i - 1] + num[i], 0);
if (dp[i] == 0)
{
maxl[i] = num[i];
maxr[i] = num[i];
j = i + 1;
}
else
{
maxl[i] = num[j];
maxr[i] = num[i];
}
}
ma = 0;
int mal = 0,mar = 0;
for (i = 1; i <= n; i++)
if (ma < dp[i])
{
ma = dp[i];
mal = maxl[i];
mar = maxr[i];
}
//for (i = 1; i <= n; i++)
// cout << dp[i] << " " ;
//cout << endl;
cout << ma << " " << mal << " " << mar << endl;
}
return 0;
}
- HDU--dp练习--1003--最大连续子序列
- HDU 1231 最大连续子序列(HDU 1003 dp)
- Hdu 最大连续子序列(DP)
- hdu 1231 最大连续子序列(DP)
- HDU 1231 最大连续子序列 (dp)
- hdu 1231最大连续子序列 【DP】
- hdu 1231 最大连续子序列 (dp)
- HDU 1231 最大连续子序列(dp)
- 最大连续子序列 - HDU 1231 dp
- hdu 1231 最大连续子序列 DP
- hdu 1231 最大连续子序列(dp)
- HDU-1231-最大连续子序列【dp】
- hdu 1231 最大连续子序列 DP
- HDU 1231 最大连续子序列(DP)
- HDU-1231-最大连续子序列【DP】
- HDU 1231 最大连续子序列【dp】
- HDU 1231 最大连续子序列 DP .
- hdu 1231 dp 最大连续子序列
- 十分钟理解Java中的动态代理
- Exception : javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
- Spring4.3x教程之一IOC&DI
- js的属性操作及注意事项!!
- 基于boost的ini 文件读取/枚举/写入操作
- HDU--dp练习--1003--最大连续子序列
- web前端知识2
- 导弹力学分析_3
- 2017年7月19日奥地利维也纳之旅
- 实用性强的批处理/DOS指令笔记
- Android:运行时权限(转自网络)
- git 操作之合并commit(提交之前本地合并)
- hdu_1016(剪枝深度优先搜索)
- Spring web 应用程序