HJ103 Redraiment的走法

知识点排序

描述

Redraiment 是走梅花桩的高手。现在,地上有 n 个梅花桩排成一排,从前到后高度依次为 h1,h2,...,hn。

Redraiment 可以任选一个梅花桩开始,向后跳到任意一个比当前高度高的梅花桩上。

求 Redraiment 最多可以跳过多少个梅花桩。

输入描述:

第一行输入一个整数 n(1≦n≦200)代表梅花桩的数量。

第二行输入 n 个整数 h1,h2,...,hn(1≦hi≦350)代表每一个梅花桩的高度。

输出描述:

输出一个正整数,代表 Redraiment 最多可以跳过多少个梅花桩。

示例1

输入:

复制代码
6
2 5 1 5 4 5

输出:

复制代码
3

说明:

复制代码
在这个样例中,其中一个最优的选择是,从第一个桩子起跳,最多可以跳三个梅花桩,使用橙色加粗标识:{2,5,1,5,4,5}。
另外一种最优选择是,从第三个桩子起跳,最多也可以跳三个梅花桩,使用橙色加粗标识:{2,5,1,5,4,5}。
cpp 复制代码
#include<iostream>
#include<vector>
using namespace std;

int lis(vector<int>& arr) {
    vector<int> dp(arr.size(), 1); //设置数组长度大小的动态规划辅助数组
    int max = 1;
    for(int i = 1; i < arr.size(); i++){
         for(int j = 0; j < i; j++){
            if(arr[i] > arr[j] && dp[i] < dp[j] + 1) {
                dp[i] = dp[j] + 1; //i点比j点大,理论上dp要加1
                //但是可能j不是所需要的最大的,因此需要dp[i] < dp[j] + 1
                max = max > dp[i] ? max : dp[i]; //找到最大长度
            }
        }
    }
    return max;
}

int main(){
    int n;
    while(cin >> n){
        vector<int> arr(n);
        for(int i = 0; i < n; i++) //输入
            cin >> arr[i];
        cout << lis(arr) << endl; //计算最长递增子序列长度
    }
    return 0;
}
相关推荐
碧海银沙音频科技研究院2 小时前
炬芯ATS3089X手表的HFP通话不自动路由到设备BT的问题解决
网络·人工智能·嵌入式硬件·算法
专注仿真7 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
码爸7 小时前
支持向量机介绍与示例
算法·机器学习·支持向量机
怕浪猫7 小时前
2028编程圈很火的10个Skills
算法·面试·github
别动我齐刘海9 小时前
Linux 系统调试学习1
linux·运维·服务器·c++·学习·机器学习·机器人
Nil20812 小时前
leetcode 198打家劫舍
算法·leetcode·职场和发展
Shaoshing12 小时前
前缀和与差分
java·数据结构·算法·前缀和·差分
loulanyue_13 小时前
构建房产认知决策智能:Harness底座与AI自进化的技术实践——读贝壳首席算法科学家尹俊希2026云栖专场演讲
人工智能·算法
碧海银沙音频科技研究院13 小时前
基于炬芯ATS录音卡BLE控制协议
人工智能·嵌入式硬件·算法·语音识别