51nod1241(连续上升子序列)

题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1241

题意:中文题诶~

思路:通过观察我们不难发现就是找连续上升子序列,答案就是n-最长连续上升子序列长度;

注意:我们要找的是3, 4, 5, 6这样的连续上升子序列,而非1, 3, 5, 9 这样的上升子序列,因为两个连续的数之间如果有其他数我们可以直接移除,但是如果不连续的话我们无法直接加进去。。。

代码:

 1 #include <iostream>
 2 #define MAXN 50010
 3 using namespace std;
 4
 5 int dp[MAXN];
 6
 7 int main(void){
 8     ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
 9     int n, x, ans=0;
10     cin >> n;
11     for(int i=0; i<n; i++){
12         cin >> x;
13         dp[x]=dp[x-1]+1;
14         ans=max(ans, dp[x]);
15     }
16     cout << n-ans << endl;
17     return 0;
18 }
时间: 2024-11-03 05:27:32

51nod1241(连续上升子序列)的相关文章

任意区间的最长连续递增子序列,最大连续子序列和

hdu3308 给n个数,有m个操作 U a b 表示将第a个数改成b Q a b 表示询问区间[a,b]的最长连续递增子序列. 区间询问问题且带修改,一般是用线段树来解决 那么要维护 Llen[rt], Lval[rt][2] 表示rt所对应的区间[l,r] 以l开头的最长连续递增子序列的长度, Lval[rt][0]表示子序列的最左边的值,Lval[rt][1]表示子序列最右边的值 Rlen[rt],Rval[rt][2]  表示rt所对应的区间[l,r]以r结尾的最长连续递增子序列的长度,

最长非连续递减子序列长度&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

lintcode 中等题 :Maximum Product Subarray 最大连续乘积子序列

题目 乘积最大子序列 找出一个序列中乘积最大的连续子序列(至少包含一个数). 样例 比如, 序列 [2,3,-2,4] 中乘积最大的子序列为 [2,3] ,其乘积为6. 解题  法一:直接暴力求解 时间复杂度O(N2) public class Solution { /** * @param nums: an array of integers * @return: an integer */ public int maxProduct(int[] nums) { // write your c

LeetCode -- 最大连续乘积子序列

问题描写叙述: 给定数组,找出连续乘积最大值的子序列.比如 0,-1,-3.-2.则最大连续乘积为6= (-3) * (-2) 实现思路此题与最大连续和的子序列问题相似,也可通过找到递推公式然后用DP来解.关键在于求公式的过程要考虑到元素可能为负的情况.如果元素都为正数的话,DP公式为:dp[i] = max(a[i],dp[i-1]*a[i]) ,乘或不乘,取最大的那个可元素可能为负数.因此能够使用min和max分别存当前最大值和最小值,如果当前元素为负数的话,当前最小值就成了最大值.这样一来

Maximum Product Subarray(最大连续乘积子序列)

Find the contiguous subarray within an array (containing at least one number) which has the largest product. For example, given the array [2,3,-2,4],the contiguous subarray [2,3] has the largest product = 6. 思路:类似最大和连续子序列那样,不过除了记录最大乘积,我们还要记录最小的乘积.这里我

【两段连续不重合子序列和最大】 动态规划

最大子序列 TimeLimit: 1 Second MemoryLimit: 32 Megabyte Totalsubmit: 156 Accepted: 42 Description 给定一个N个整数组成的序列,整数有正有负,找出两段不重叠的连续子序列,使得它们中整数的和最大.两段子序列都可以为空. Input 多组输入,每组第一行为N,表示序列的长度:第二行为N个整数,表示输入序列.0<N<=1,000,000 Output 对于每组输入,输出一行,仅一个整数,表示最大的和. Sample

hdu-1231 连续最大子序列(动态规划)

Time limit1000 ms Memory limit32768 kB 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= K.最大连续子序列是所有连续子序列中元素和最大的一个, 例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和 为20. 在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求

最长连续递增子序列(部分有序)

题目:(1,9,2,5,7,3,4,6,8,0,)中最长的递增子序列为(3,4,6,8). 代码: public class 最长递增子序列 { public static void main(String[] args) { int []arr = {1,0,2,5,7,3,4,6,8,9,1,2}; getLargestLen(arr); } private static void getLargestLen(int[] arr) { int begin=0; // 最长递增子序列长度的开始

【算法】——查找:最长连续递增子序列(部分有序)

找出在数组中的最长递增子序列 数组:1,9,2,5,7,3,4,6,8,0 最长递增子序列:3,4,6,8 思路: 遇到大的就移动,如果在某一个位置变小了就计算这一段的长度(双指针)不停更新最大的length一个在前线,一个在后面作为游标,最后结束了看一下战线拉了有多长 public class 最长递增子序列 { public static void main(String[] args) { int []arr = {0,1,0,1,2,3,1,2,0,1,2,3,4,5,1}; getLa