第一次写博客, 自己总结写出了一道题感觉值得保存。

自己总结的规律:求最大连续子序列, 可以先求包括第N项在内的前N项最大值, (因为每一项都求过后, 前N项最大值最大的那一个元素所连续的序列即为最大连续子序列), 每次求包括第N项在内的前N项最大值时记录开始下标。

列:1 2 -2 5 -8 3;

第1项:1 开始下标为1

第2项:3 开始下标为1

第3项:1 开始下标为1

第4项:6 开始下标为1

第5项:-2 开始下标为1

第6项: 3 开始下标为6

最大值为几在于其前面项最大值是不是小于0;

如果不小于0 即加上为最大  开始下标不变;

如果 小于0, 最大为自己本身, 开始下标变成自己下标;

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 10010
#define max(a, b) (a > b ? a : b)

int max[N], a[N], start[N];// max[N]为前N项中 包括a[N]在内和的最大值, start[N]保存的是 前N项包括a[N]在内取最大值时的初始下标;

int main()
{

int i, n, j, flag, maxn, flag_end, flag_start;
while(scanf("%d", &n), n)
{
flag = 0;//标志来判断是不是所有元素都为负数;
for(i = 1; i <= n; i++)//从1开始,start[]的下标更容易理解;
{
scanf("%d", &a[i]);
if(a[i] >= 0)
flag = 1;//只要有一个数字不为负数,flag = 1;
}

if(flag == 0)
{
printf("0 %d %d\n", a[1], a[n]);//全为负数, 输出0, 第一项,最后一项;
continue;
}

max[1] = a[1], start[1] = 1;

for(i = 2; i <= n; i++)
{
if(max[i - 1] >= 0)
{
max[i] = max[i - 1] + a[i];//若a[i]的前一项大于0, 则加。
start[i] = start[i - 1];//开始坐标仍旧为前一项的开始坐标;
}
else
{
max[i] = a[i];//若前一项不大于0, 则用a[i]更新max[i]最大值;
start[i] = i;//开始坐标为i;
}
}
maxn = max[1];
flag_end = a[1];
flag_start = a[start[1]];//初始化,准备求最大连续子序列。

for(i = 1; i <= n; i++)
if(maxn < max[i])//更新最大连续子序列与起始下标, 结束下标;
{
maxn = max[i];
flag_end = a[i];
flag_start = a[start[i]];
}

printf("%d %d %d\n", maxn, flag_start, flag_end);
}

}

HDU 1231:最大连续子序列 解题报告的更多相关文章

  1. HDU 1231 最大连续子序列 --- 入门DP

    HDU 1231 题目大意以及解题思路见: HDU 1003题解,此题和HDU 1003只是记录的信息不同,处理完全相同. /* HDU 1231 最大连续子序列 --- 入门DP */ #inclu ...

  2. HDU 1231.最大连续子序列-dp+位置标记

    最大连续子序列 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  3. HDU 1231 最大连续子序列 &&HDU 1003Max Sum (区间dp问题)

    C - 最大连续子序列 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit ...

  4. HDU 1231 最大连续子序列:水dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1231 题意: 给你一个整数序列,求连续子序列元素之和最大,并输出该序列的首尾元素(若不唯一,输出首坐标 ...

  5. DP专题训练之HDU 1231 最大连续子序列

    Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j < ...

  6. HDU 1231 最大连续子序列(水题)

    题目链接: 传送门 最大连续子序列 Time Limit: 1000MS     Memory Limit: 32768 K Description 给定K个整数的序列{ N1, N2, ..., N ...

  7. HDU 1003 Max Sum && HDU 1231 最大连续子序列 (DP)

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  8. HDU 1231 最大连续子序列 (dp)

    题目链接 Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ...,  Nj },其中 1 <= ...

  9. HDU 1231——最大连续子序列(DP)

    最大连续子序列 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

随机推荐

  1. 学习OpenCV——KNN算法

    转自:http://blog.csdn.net/lyflower/article/details/1728642 文本分类中KNN算法,该方法的思路非常简单直观:如果一个样本在特征空间中的k个最相似( ...

  2. H5 新标签用法及解释

    HTML 5 是一个新的网络标准,目标在于取代现有的 HTML 4.01, XHTML 1.0 and DOM Level 2 HTML 标准.它希望能够减少浏览器对于需要插件的丰富性网络应用服务(p ...

  3. 郑轻校赛题目 问题 G: 多少个0

    问题 G: 多少个0 时间限制: 1 Sec  内存限制: 128 MB提交: 192  解决: 40 题目描述 一个n*n的方格,每个格子中间有一个数字是2或者5,现在从方格的左上角走到右下角,每次 ...

  4. ExtJs Panel 滚动条设置

    设置autoscroll:true同时出现横向和纵向滚动条. 不要设置autoscroll属性,或者autoscroll:false,然后设置bodyStyle : 'overflow-x:hidde ...

  5. .NET 使用CouchBase 基础篇

    2011年2月,CouchOne和memebase合并后,改名为Couchbase,官网地址(www.couchbase.com).membase最后一个版本为1.7.2,可在Couchbase的官网 ...

  6. ADO.NET 新特性之SqlBulkCopy

    在.Net1.1中无论是对于批量插入整个DataTable中的所有数据到数据库中,还是进行不同数据源之间的迁移,都不是很方便.而 在.Net2.0中,SQLClient命名空间下增加了几个新类帮助我们 ...

  7. android手电筒(摇一摇也可开启手电筒)

    package com.firefly.myflashlight; import android.app.Activity; import android.hardware.Camera; impor ...

  8. c#邮箱发送和接收

    简洁版发送: //web.config ---文件 <?xml version="1.0" encoding="utf-8"?> <!-- 有 ...

  9. SQL MD5加密

    ) 加密结果:

  10. 堆排序(C++实现)

    #include<iostream> #include<vector> using namespace std; void swap(vector<int> &am ...