第1关:最长非降子序列(非连续)问题
方法一:使用栈的方式
//
// main.cpp
// step1
//
// Created by ljpc on 2018/12/8.
// Copyright ? 2018年 ljpc. All rights reserved.
//#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include<stack>
using namespace std;const int maxn = 101;
int main(int argc, const char * argv[]) {// 请在这里补充代码,完成本关任务/********* Begin *********/int n;cin>>n;int arr[maxn];memset(arr,0,sizeof(arr));for(int i=1;i<=n;i++){cin>>arr[i];}int id[maxn];memset(id,0,sizeof(id));int dp[maxn];for(int i=1;i<=n;i++)dp[i]=1;int max_index=0; int ans=1;for(int i=2;i<=n;i++){for(int j=1;j<i;j++){if(arr[j]<arr[i]&&dp[j]+1>dp[i]){dp[i]=dp[j]+1;id[i]=j;}}if(dp[i]>ans){max_index=i;ans=dp[i];}}stack<int>st;int i=max_index;st.push(arr[max_index]);//以下这个循环是在模拟递归while(id[i]){i=id[i];st.push(arr[i]);}while(!st.empty()){cout<<st.top()<<" ";st.pop();}cout<<endl;/********* End *********/return 0;
}
方法二:
//
// main.cpp
// step1
//
// Created by ljpc on 2018/12/8.
// Copyright ? 2018年 ljpc. All rights reserved.
//#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include<stack>
using namespace std;const int maxn = 101;
int main(int argc, const char * argv[]) {// 请在这里补充代码,完成本关任务/********* Begin *********/int n;cin>>n;int arr[maxn];memset(arr,0,sizeof(arr));for(int i=1;i<=n;i++){cin>>arr[i];}int id[maxn];memset(id,0,sizeof(id));int dp[maxn];for(int i=1;i<=n;i++)dp[i]=1;int max_index=0; int ans=1;for(int i=n-1;i>=1;i--){for(int j=i+1;j<=n;j++){if(arr[i]<arr[j]&&dp[j]+1>dp[i]){dp[i]=dp[j]+1;id[i]=j;}}if(dp[i]>ans){max_index=i;ans=dp[i];}}int i=max_index;cout<<arr[i]<<" ";while(id[i]){i=id[i];cout<<arr[i]<<" ";}cout<<endl;/********* End *********/return 0;
}
第1关:最长非降子序列(非连续)问题相关推荐
- 最长非降子序列(动态规划dp dynamic programming)
首先要理解一下什么叫做非降子序列 非降子序列,简单来说就是指给出一个数字序列,在不改变整体顺序的情况下摘出几个来组成一个子序列,这个序列满足从小到大的排序顺序. 所以,最长非降子序列,不难理解就是从这 ...
- 动态规划 dp02 最长非降子序列问题 c代码
先看下题目: 给定一个由n个正整数组成的序列,从该序列中删除若干个整数,使剩下的整数组成非降子序列,求 最长的非降子序列. 例如,由12个正整数组成的序列为:48,16,45,47,52,46,36, ...
- 最长非降子序列 动态规划 java
1. 案例提出 给定一个由n个正整数组成的序列,从该序列中删除若干个整数,使剩下的整数组成非降子序列,求最长的非降子序列. 例如,由12个正整数组成的序列为: 48,16,45,47,52,46,36 ...
- 动态规划——最长非降子序列
前言 先分享一篇文章<动态规划:从新手到专家>,作者正是通过这篇文章来学习的.文中对动态规划的设计思想做了非常详细的介绍,并通过简单问题和复杂问题对动态规划的设计流程进行剖析,以下是作者和 ...
- HDU2227(非降子序列的个数)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2227 题意:给定一个长度为n(n <= 100000)的整数序列,求其中的非降子序列的个数. 分析: ...
- codeforces F.F. Teodor is not a liar! 最长不降子序列
题意 给出一堆线段. 询问者每次可以询问一个整数点,回答者告诉询问者这个点被多少根线段包括. 问询问者最多问多少次,还不能确定任意一个整数点都不可能被所有的线段包含. 题解 首先用O(n)的方法计算出 ...
- 求序列最长不下降子序列_树状数组解决最长不下降子序列 讲讲主要思路就好...
展开全部 不降子序列求的是一个元素的值单调e69da5e887aa62616964757a686964616f31333361306430不降的序列. 传统的状态设计便是使用f[n] 表示到达第n位时 ...
- 面试题:求最长非重复子序列
题目:求字符串的最长非重复子序列.比如字符串"dabaccdeff",它的最长非重复子序列为"dabcef" 这道题目与 面试题35:第一个只出现一次的字符 非 ...
- 最长非下降子序列(O(nlogn))(offer收割)
题目 如题 思路 核心思想是,维护一个数组ends,它记录了长度为k的子序列的末尾元素的最小值.听起来很抽象,我们不妨手动演示一遍整个过程. 假设数组a={2,9,4,27,29,15,7 ...
最新文章
- 使用Python和OpenCV对轮廓进行排序(从左到右,自上而下)
- 方法 - 查询到本周的日期
- [NOI2017]游戏(2-SAT)
- rpm安装mysql图文
- AMPAS/ASC Common File Format LUT
- [JDK8]性能优化之使用LongAdder替换AtomicLong
- php编译成二进制文件_JVM字节码文件概述
- (软件工程复习核心重点)第二章可行性研究习题
- Ibatis学习总结2--SQL Map XML 配置文件
- win10mongodb链接_Windows 10 安装 Mongodb
- Sql Server 2005如何导入DBF文件?
- js设计模式——8.中介者模式
- 关于影响NodeManager执行MR任务constainer数量的设置问题
- 无法登录谷歌账号,提示次浏览器或应用可能不安全
- ssm的餐饮点餐系统源码
- SSO单点登录系统的设计与实现
- 微信支付商户平台的apikey与公众平台的appsecret的区别
- 2016年北京邮电大学计算机考研机试试题及答案
- 基于Java(JSP)+MySQL实现盐鱼二手物品交易网站【100010280】
- ppt太大了怎么改小一些?