当前位置: 首页 > news >正文

牛客网之华为机试题:HJ24 合唱队(动态规划)

一. 简介

本文记录牛客网上华为机试题:合唱队

本文通过动态规划思路,以C语言实现。

二. 牛客网之华为机试题:HJ24 合唱队(动态规划)

描述

音乐课上,老师将 nn 位同学排成一排。老师希望在不改变同学相对位置的前提下,从队伍中选出最少数量的同学,使得剩下的同学排成合唱队形。

你能帮助老师计算,最少需要出列多少位同学,才能使得剩下的同学排成合唱队形?

输入描述:

第一行输入一个整数 n(1≦n≦3000)代表同学数量。

第二行输入 n 个整数 h1,h2,…,hn(0≦hi≦105)代表每一位同学的身高。

输出描述:

输出一个整数,代表最少需要出列的同学数量。

示例1

输入:8

186 186 150 200 160 130 197 200

输出:4

说明:

在这个样例中,有且仅有两种出列方式,剩下的同学分别为 {186,200,160,130}{186,200,160,130} 和 {150,200,160,130}{150,200,160,130} 。

解题思路:动态规划

1.求每个位置左侧最长递增子序列(从左到右)

2. 求每个位置上右侧最长递减子序列(从右向左)

3.统计最长子序列(即最长合唱队形)

4. 最少出列人数:总人数-最长子序列数

C语言实现如下:


/*
动态规划
*/
#include <stdio.h>
#include <stdlib.h>int main() {int n = 0;int* height;int i, j;int max_len = 0;if(scanf("%d", &n) != EOF) {height = (int*)malloc(n*sizeof(int));for(i=0; i<n; i++) {scanf("%d", &height[i]);}}//1.求每个位置左侧最长递增子序列(从左到右)int* left_dp = (int*)malloc(n*sizeof(int));for(i=0; i<n; i++) {left_dp[i] = 1; //每个元素自身就是1个子序列for(j=0; j<i; j++) {//(left_dp[j]+1)>left_dp[i]://把height[i]接在以height[j]结尾的递增序列后面,能形成比当前记录更长的序列//那么就更新dp_inc[i]if((height[j]<height[i]) && ((left_dp[j]+1)>left_dp[i])) {left_dp[i]=left_dp[j]+1;}}}//2. 求每个位置上右侧最长递减子序列(从右向左)int* right_dp = (int*)malloc(n*sizeof(int));for(i=n-1; i>=0; i--) {right_dp[i]=1;for(j=n-1; j>i; j--) {//(right_dp[i]+1)>right_dp[i]://把height[i]接在以height[j]结尾的递增序列前面,能形成比当前记录更长的序列//则更新 right_dp[i]if((height[j]<height[i]) && ((right_dp[j]+1)>right_dp[i])) {right_dp[i]=right_dp[j]+1;}}}//3.统计最长子序列(即最长合唱队形)//上面两种子序列数目相加,求最长子序列数目for(i=0; i<n; i++) {if((left_dp[i]+right_dp[i]-1) > max_len) {max_len = left_dp[i]+right_dp[i]-1;}}//4. 最少出列人数:总人数-最长子序列数printf("%d\n", (n-max_len));free(height);height=NULL;free(left_dp);left_dp=NULL;free(right_dp);right_dp=NULL;return 0;
}

http://www.lryc.cn/news/610028.html

相关文章:

  • HFSS许可监控与分析
  • 向量空间模型
  • day23-线程篇(一)
  • 什么是内容管理系统?
  • 基于实时音视频技术的远程控制传输SDK的功能设计
  • mysql中使用LIMIT分页查询数据出现深分页的原因
  • 【音视频】WebRTC 一对一通话-实现概述
  • SpringMVC在前后端分离架构中的执行流程详解
  • AI绘画-Stable Diffusion-WebUI的ControlNet用法
  • STM32F103C8T6 BC20模块NBIOT GPS北斗模块采集温湿度和经纬度发送到EMQX
  • 攻防世界-easyphp-lever1
  • k8s常见问题
  • 【ECCV2024】AdaCLIP:基于混合可学习提示适配 CLIP 的零样本异常检测
  • Design Compiler:高层次优化与数据通路优化
  • 【Spring Boot 快速入门】六、配置文件
  • Java 发送 HTTP POST请求教程
  • Scikit-learn - 机器学习库初步了解
  • MoonBit Pearls Vol.04:用MoonBit 探索协同式编程
  • Spring IoC容器与Bean管理
  • GPTs——定制的小型智能体
  • 白杨SEO:百度搜索开放平台发布AI计划是什么?MCP网站红利来了?顺带说说其它
  • [Oracle] || 连接运算符
  • 关于如何自定义vscode(wsl连接linux)终端路径文件夹文件名字颜色的步骤:
  • 【PHP】获取图片的主要颜色值RGB值
  • 【Django】-3- 处理HTTP响应
  • Django 性能优化详解:从数据库到缓存,打造高效 Web 应用
  • CNN卷积神经网络之MobileNet和ResNet(五)
  • AWS Lambda Function 全解:无服务器计算
  • CAD格式转换器HOOPS Exchange:全方位支持HOOPS系列产品
  • Webpack 搭建 Vue3 脚手架详细步骤