Max Sequence

时间限制:1000 ms  |  内存限制:65535 KB
难度:5
描述

Give you N integers a1, a2 ... aN (|ai| <=1000, 1 <= i <= N).

You should output S.

输入
The input will consist of several test cases. For each test case, one integer N (2 <= N <= 100000) is given in the first line. Second line contains N integers. The input is terminated by a single line with N = 0.
输出
For each test of the input, print a line containing S.
样例输入
5
-5 9 -5 11 20
0
样例输出
40

解题思路:最大子串和的变形题,利用dp的思想,dp[i][0]表示从从左边扫,以i结尾的最大子串和,同理dp[i][1]表示从右边扫,以i结尾的最大子串和。

首先要明白这样做的目的,我们是想要枚举分界线k,那么两个串就被分成两段1-(k-1)和k-n,我们只要找到这两段的最大子串和,加起来即可。

光知道dp[i]还不够,因为算的是以i结尾,我们有可能不会去取第i个数,所以还需要再用一次dp的思想,去解决前i个数内的最大子串和,同样需要知道从左扫的L[i]和从右边扫的R[i]。。都是比较简单的dp。。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int maxn = 100005;
const int inf = 0x3f3f3f3f;
int n,a[maxn];
int dp[maxn][2];
int L[maxn],R[maxn];int main()
{while(scanf("%d",&n),n){memset(L,0,sizeof(L));memset(R,0,sizeof(R));for(int i = 1; i <= n; i++)scanf("%d",&a[i]);dp[1][0] = a[1];for(int i = 2; i <= n; i++){dp[i][0] = a[i];dp[i][0] = max(dp[i][0],dp[i-1][0] + a[i]);}dp[n][1] = a[n];for(int i = n - 1; i >= 1; i--){dp[i][1] = a[i];dp[i][1] = max(dp[i][1],dp[i+1][1] + a[i]);}L[1] = dp[1][0];for(int i = 2; i <= n; i++)L[i] = max(L[i-1],dp[i][0]);R[n] = dp[n][1];for(int i = n - 1; i >= 1; i--)R[i] = max(R[i+1],dp[i][1]);int ans = -inf;for(int i = 2; i < n; i++)ans = max(ans,L[i-1] + R[i]);printf("%d\n",ans);}return 0;
}

nyoj 174 Max Sequence(最大子串和变形)相关推荐

  1. nyoj 947 Max Xor(字典树)

    Max Xor 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 给一个长度为 n 的数列 {an} ,找出 max {ai ^ aj}. 输入 多组测试数据. 第 1 行 ...

  2. hdu 5280(最大子串和变形,dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5280 解题思路:动态规划,dp[i][0]表示以第i个数结尾时,没把p添加到数列中,dp[i][1]表 ...

  3. NYOJ 427 Number Sequence

    题目链接~~> 这题可以找规律也可以用矩阵乘法做. 矩阵解法: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 题 ...

  4. 【最长回文子串】Manacher算法详解

    写在前面 manacher算法解决最长回文子串以及变形问题的时间复杂度为O(n). 如果你想囫囵吞枣,只需要使用到该算法,你可以直接把代码拿走:但如果你想深入了解这个算法的工作原理和关键部分解读,还是 ...

  5. Data Guard出现gap sequence修复

    在做 用R/W方式打开standby数据库,创建一个对象,然后通过flashback database将standby db 恢复到打开前的状态 作业时,故意没有     执行     SQL> ...

  6. NYOJ 24 素数距离问题

    素数距离问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素数 ...

  7. 动态规划详解 转自瞿老师的博客

    目录     一.动态规划初探       1.递推       2.记忆化搜索       3.状态和状态转移       4.最优化原理和最优子结构       5.决策和无后效性   二.动态规 ...

  8. LeetCode(1-200)

    目录 LeetCode 1. 两数之和 LeetCode 2. 两数相加 LeetCode 3. 无重复字符的最长子串 LeetCode 4. 寻找两个正序数组的中位数 LeetCode 5. 最长回 ...

  9. python实现自顶向下,自底向上

    常用的算法设计思想主要有动态规划.贪婪法.随机化算法.回溯法等等,这些思想有重叠的部分,当面对一个问题的时候,从这几个思路入手往往都能得到一个还不错的答案. 本来想把动态规划单独拿出来写三篇文章呢,后 ...

最新文章

  1. 图解:轻松看懂机器学习十大常用算法
  2. 文末惊喜福利 | 盘点2021主流架构创新实践
  3. Spring中神奇@aotuWrited
  4. Scala go java_Java、Scala和Go语言多线程并发对比测试结果和结论
  5. JAVA深入研究——Method的Invoke方法(转)
  6. java孢子进化_孢子进化论游戏
  7. 【图神经网络】GNN从入门到精通
  8. Opencv3.2各个模块功能详细简介(包括与Opencv2.4的区别)
  9. 使用毫秒单位来进行计算程序执行时间
  10. block locality
  11. 大战略游戏:统治者:罗马 for Mac
  12. ps4移植android游戏,把PS4游戏《Apex英雄》《只狼》搬到安卓手机上玩,这招够简单!...
  13. PAT 乙级 1020  月饼
  14. torch.jit.trace与torch.jit.script的区别
  15. 数据库 、数据仓库、数据集市的区别与联系
  16. FFmpeg源码分析:视频滤镜介绍(上)
  17. 设计模式--享元模式
  18. 坚强的人:可以承受压力的品质是包容
  19. 【并查集】银河英雄传说
  20. 滴滴出行打车APP-增加RFID认证、海外版、司机证件号码识别功能

热门文章

  1. oracle中的柱状图,详解Oracle中XMI开发UML图表技术
  2. java创建oracle用户_oracle添加用户并指定数据库
  3. 神策 2020 数据驱动用户大会报名开启
  4. 干货盘点:神策数据深度用户案例传送门
  5. MyEclipse开发教程:使用REST Web Services管理JPA实体(四)
  6. 26期20180703 正则 grep
  7. 修正memcache.php中的错误示例
  8. Java中String类型的数据比较
  9. MySql按字段分组取最大值记录
  10. 求幂,我居然又没做出来