牛客:HJ24 合唱队[华为机考][最长递增子集][动态规划]

学习要点

  1. 求最长递增字列
  2. 求最长递减子列

题目链接

合唱队_牛客题霸_牛客网

题目描述

解法:动归求最长递增子列

cpp 复制代码
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    while (cin >> n) {
        // 输入的数组
        int tmp;
        vector<int> v;
        for (int i = 0; i < n; ++i) {
            cin >> tmp;
            v.push_back(tmp);
        }

        // 最长递增子序列 从左往右
        if (v.empty()) return 0;
        vector<int> dp1(n, 1);
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j <  i ; ++j) {
                if (v[i] > v[j]) {
                    dp1[i] = max(dp1[i], dp1[j] + 1);
                }
            }
        }
        // 最长递减子序列 从右往左
        if (v.empty()) return 0;
        vector<int> dp2(n, 1);
        for(int i = n-1;i>=0;i--)
        {
            for(int j = n-1;j>i;j--)
            {
                if(v[i] > v[j])
                {
                    dp2[i] = max(dp2[i],dp2[j]+1);
                }
            }
        }

        int result;
        for(int i =0;i<n;i++)
        {
            result = max(result,dp1[i]+dp2[i]-1);
        }
        cout << n - result;


    }
}
// 64 位输出请用 printf("%lld")
相关推荐
拾光拾趣录1 分钟前
链表合并:双指针与递归
前端·javascript·算法
好易学·数据结构6 分钟前
可视化图解算法56:岛屿数量
数据结构·算法·leetcode·力扣·回溯·牛客网
香蕉可乐荷包蛋1 小时前
AI算法之图像识别与分类
人工智能·学习·算法
迷曳1 小时前
27、鸿蒙Harmony Next开发:ArkTS并发(Promise和async/await和多线程并发TaskPool和Worker的使用)
前端·华为·多线程·harmonyos
chuxinweihui2 小时前
stack,queue,priority_queue的模拟实现及常用接口
算法
tomato092 小时前
河南萌新联赛2025第(一)场:河南工业大学(补题)
c++·算法
墨染点香2 小时前
LeetCode Hot100【5. 最长回文子串】
算法·leetcode·职场和发展
人肉推土机2 小时前
Planning Agent:基于大模型的动态规划与ReAct机制,实现复杂问题自适应执行求解
大模型·动态规划·react·planning agent
甄卷3 小时前
李沐动手学深度学习Pytorch-v2笔记【08线性回归+基础优化算法】2
pytorch·深度学习·算法
Ashlee_code3 小时前
美联储降息趋缓叠加能源需求下调,泰国证券交易所新一代交易系统架构方案——高合规、强韧性、本地化的跨境金融基础设施解决方案
java·算法·金融·架构·系统架构·区块链·需求分析