[pythontip]最大非连续子序列

题目链接:http://www.pythontip.com/coding/code_oj_case/36给你一个整数list L, 如 L=[2,-3,3,50], 求L的一个非连续子序列,使其和最大,输出最大子序列的和。
这里非连续子序列的定义是,子序列中任意相邻的两个数在原序列里都不相邻。
例如,对于L=[2,-3,3,50], 输出52(分析:很明显,该列表最大非连续子序列为[2,50]).

dp首先复制L序列的元素,然后比较前两个元素,确定最优解赋值给dp[1]。
1 # L=[2,-3,3,50]
2 dp = list(L)
3 dp[1] = max(dp[1], dp[0])
4 for i in range(2, len(L)):
5     dp[i] = max(max(dp[i], dp[i-1]), dp[i-2]+L[i])
6 print(dp[len(L)-1])
时间: 2024-11-07 07:48:23

[pythontip]最大非连续子序列的相关文章

HDU ACM 4745 Two Rabbits 最长非连续回文子序列

分析:两个不同方向开始跳跃,跳过数字相同,就相当于求回文子序列了.用dp求出从一个位置到另一个位置的最长回文子序列,相当于把[1-n]分成区间[1-x]和[x+1,n],结果就是两区间最长回文串子序列之和.枚举中间点i,求出max(dp[1,i]+dp[i+1,n])即得最终结果,回文非连续序列,从前往后,从后往前序列相同,求出区间内最长回文序列,由于是环,分成两部分,1~i,i+1~n,A可从i走到1,然后从n走到i+1,B可从1走到i,从i+1走到n . #include<iostream>

最长非连续递减子序列长度&amp;个数

1 int a[100] = {68, 69, 54, 64, 68, 64, 70, 67, 78, 62, 98, 87}; //主序列; 2 int n = 1; //主序列元素个数; 3 int large = 1; //最长非连续递减子序列序列长度; 4 int num = 1; //最长非连续递减子序列序列数量; 5 int fun(int i, int n, int cnt) // i开始下标; n结束下标; cnt已找到递减序列长度; 6 { 7 if(i == n) 8 ret

连续非递减子序列

描述 一个序列中的元素a1,a2,...,an,若满足a1<=a2<=...<=an,则称该序列为非递减序列. 现给定一个序列,问该序列最少可以分割为多少个连续的非递减子序列. 比如: 1 2 5 3 4 可以分割为两个非递减子序列1 2 5和3 4. 而: 5 4 3 2 1 则只能分割为5个非递减子序列,每个子序列长度均为1. 输入 输入第一行为正整数n(n<=100), 第二行有n个整数,为组成的序列元素. 输出 输出最少分割的连续非递减子序列个数. 样例输入 5 1 2 5

最大连续子序列和问题(Maximum Consecutive Subsequence Sum)

该算法的定义是:给出一个int序列,元素有正有负,找出其中的最大连续子序列的和. 例如:-2,11,-4,13,-5-2,:最大和为20(11,-4, 13). 怎么考虑这个问题呢? 要充分利用,连续,这个条件. 连续子序列的和可能为正,也可能为负.如果为正,那么我们要继续加下去,因为如果后面一个数是正数, 最大子序列和必定包括前序列的和(毕竟前者和为正),如果后面一个是负数,我们也加,直到子序列的和不为正为止. 因为它不为正,所以如果后面有更大的连续子序列,那么也不会包括它,因为加上一个非正数

最大连续子序列和

对于给定的数组 numnum,一个长度为 ss 的连续子序列是指由 num_i,num_{i+1},num_{i+2}\ldots,num_{i+s-1}num?i??,num?i+1??,num?i+2??…,num?i+s−1?? 组成的序列.数组中的元素有可能为正数.负数或 00.你需要从数组中找出元素总和最大的一个连续子序列. 比如,对于数组 1,-3,2,6,-5,81,−3,2,6,−5,8,其最大连续子序列之和是 2+6-5+8=112+6−5+8=11. 对于一段区间内的最大连续

hdu1231 最大连续子序列

最大连续子序列 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 22849    Accepted Submission(s): 10135 Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j

dp-最大连续子序列的和

什么是最大连续子序列和呢 ? 最大连续子序列和是所有子序列中元素和最大的一个 . 问题 : 给定一个序列 { -2, 11, -4, 13, -5, -2 } , 则最大连续子序列和为 20 , 即 { 11 , -4 , 13 } . 分析 : 要怎样去解决这个问题呢 ? 设出 两个变量 , 一个 ans 用来存放最终的结果 , 一个用来现在对元素进行加和 , 每当有最大的和则更形下 ans . 代码示例 : #include <iostream> #include <cstring&

HDU1231 最长连续子序列

最大连续子序列 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 31687    Accepted Submission(s): 14214 Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j

动态规划:最大连续子序列和

问题:给出一个数组,求其连续子序列的最大和 package 动态规划; /** * 给出一个数组,求其连续子数组的最大和 * @author Administrator * */ public class MaxSum { public static void main(String[] args) { int[] arr = new int[]{-3,1,-3,4,-1,2,1}; int max=arr[0]; int current=arr[0]; for(int i=1;i<arr.le