nyoj 174 Max Sequence(最大子串和变形)
Max Sequence
- 描述
-
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(最大子串和变形)相关推荐
- nyoj 947 Max Xor(字典树)
Max Xor 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 给一个长度为 n 的数列 {an} ,找出 max {ai ^ aj}. 输入 多组测试数据. 第 1 行 ...
- hdu 5280(最大子串和变形,dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5280 解题思路:动态规划,dp[i][0]表示以第i个数结尾时,没把p添加到数列中,dp[i][1]表 ...
- NYOJ 427 Number Sequence
题目链接~~> 这题可以找规律也可以用矩阵乘法做. 矩阵解法: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 题 ...
- 【最长回文子串】Manacher算法详解
写在前面 manacher算法解决最长回文子串以及变形问题的时间复杂度为O(n). 如果你想囫囵吞枣,只需要使用到该算法,你可以直接把代码拿走:但如果你想深入了解这个算法的工作原理和关键部分解读,还是 ...
- Data Guard出现gap sequence修复
在做 用R/W方式打开standby数据库,创建一个对象,然后通过flashback database将standby db 恢复到打开前的状态 作业时,故意没有 执行 SQL> ...
- NYOJ 24 素数距离问题
素数距离问题 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素数 ...
- 动态规划详解 转自瞿老师的博客
目录 一.动态规划初探 1.递推 2.记忆化搜索 3.状态和状态转移 4.最优化原理和最优子结构 5.决策和无后效性 二.动态规 ...
- LeetCode(1-200)
目录 LeetCode 1. 两数之和 LeetCode 2. 两数相加 LeetCode 3. 无重复字符的最长子串 LeetCode 4. 寻找两个正序数组的中位数 LeetCode 5. 最长回 ...
- python实现自顶向下,自底向上
常用的算法设计思想主要有动态规划.贪婪法.随机化算法.回溯法等等,这些思想有重叠的部分,当面对一个问题的时候,从这几个思路入手往往都能得到一个还不错的答案. 本来想把动态规划单独拿出来写三篇文章呢,后 ...
最新文章
- 图解:轻松看懂机器学习十大常用算法
- 文末惊喜福利 | 盘点2021主流架构创新实践
- Spring中神奇@aotuWrited
- Scala go java_Java、Scala和Go语言多线程并发对比测试结果和结论
- JAVA深入研究——Method的Invoke方法(转)
- java孢子进化_孢子进化论游戏
- 【图神经网络】GNN从入门到精通
- Opencv3.2各个模块功能详细简介(包括与Opencv2.4的区别)
- 使用毫秒单位来进行计算程序执行时间
- block locality
- 大战略游戏:统治者:罗马 for Mac
- ps4移植android游戏,把PS4游戏《Apex英雄》《只狼》搬到安卓手机上玩,这招够简单!...
- PAT 乙级 1020 月饼
- torch.jit.trace与torch.jit.script的区别
- 数据库 、数据仓库、数据集市的区别与联系
- FFmpeg源码分析:视频滤镜介绍(上)
- 设计模式--享元模式
- 坚强的人:可以承受压力的品质是包容
- 【并查集】银河英雄传说
- 滴滴出行打车APP-增加RFID认证、海外版、司机证件号码识别功能