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

动态规划DP 最长上升子序列模型 导弹防御模型(题目分析+C++完整代码实现)

概览检索
动态规划DP 最长上升子序列模型

导弹防御系统

原题链接

AcWiing 187. 导弹防御系统

题目描述

为了对抗附近恶意国家的威胁,R国更新了他们的导弹防御系统。
一套防御系统的导弹拦截高度要么一直 严格单调 上升要么一直 严格单调 下降。

例如,一套系统先后拦截了高度为 3和高度为 4的两发导弹,那么接下来该系统就只能拦截高度大于 4的导弹。

给定即将袭来的一系列导弹的高度,请你求出至少需要多少套防御系统,就可以将它们全部击落。

输入格式
输入包含多组测试用例。
对于每个测试用例,第一行包含整数 n,表示来袭导弹数量。
第二行包含 n个不同的整数,表示每个导弹的高度。
当输入测试用例 n=0时,表示输入终止,且该用例无需处理。

输出格式
对于每个测试用例,输出一个占据一行的整数,表示所需的防御系统数量。

数据范围
1≤n≤50

输入样例:

5
3 5 2 4 1
0 

输出样例:

2

样例解释
对于给出样例,最少需要两套防御系统。
一套击落高度为 3,4的导弹,另一套击落高度为 5,2,1的导弹。

题目分析

DFS暴搜+最长上升子序列模型
最长上升子序列模型部分参考 拦截导弹。

完整代码

#include <iostream>
#include <algorithm>
using namespace std;
const int N=55;
int n;
int a[N];
int up[N],down[N];
int ans;
/*DFS+暴搜*/
//su为拦截上升高度的系统数,sd为拦截下降高度的系统数
void dfs(int u,int su,int sd){//当前解比当前全局最优解ans大,直接returnif(su+sd>=ans) return;//如果遍历到最后一个数值,计算结束,returnif(u==n){ans=su+sd;return;}//情况1:将当前数放到上升子序列中int k=0;while(k<su&&up[k]>=a[u]) k++;  //找到一个序列结尾数小于当前数的序列int t=up[k];  //t保存原先序列结尾数up[k]=a[u];  //将当前数放在该序列后,更新结尾数if(k<su) dfs(u+1,su,sd);  //找到了符合条件的序列else dfs(u+1,su+1,sd);  //未找到符合条件的序列,新建序列,序列数su+1up[k]=t;  //回溯为原先状态//情况2:将当前数放到下降子序列中k=0;while(k<sd&&down[k]<=a[u]) k++;t=down[k];down[k]=a[u];if(k<sd) dfs(u+1,su,sd);else dfs(u+1,su,sd+1);down[k]=t;
}
int main(){while(cin>>n,n){for(int i=0;i<n;i++) cin>>a[i];ans=n;dfs(0,0,0);cout<<ans<<endl;}return 0;
}
http://www.lryc.cn/news/529611.html

相关文章:

  • LevelDB 源码阅读:写入键值的工程实现和优化细节
  • 药店药品销售管理系统的设计与实现
  • 人格分裂(交互问答)-小白想懂Elasticsearch
  • 【论文投稿-第八届智能制造与自动化学术会议(IMA 2025)】HTML, CSS, JavaScript:三者的联系与区别
  • python | OpenCV小记(一):cv2.imread(f) 读取图像操作(待更新)
  • 网络工程师 (9)文件管理
  • Java中的线程池参数(详解)
  • 2 MapReduce
  • 如何用函数去计算x年x月x日是(C#)
  • 开发过程中如何减少属性注释?
  • NX/UG二次开发—CAM—快速查找程序参数名称
  • socket实现HTTP请求,参考HttpURLConnection源码解析
  • 访问CMOS RAM
  • 解决AnyConnect开机自启动问题
  • 芯片AI深度实战:进阶篇之vim内verilog实时自定义检视
  • 数据结构实战之线性表(一)
  • jdk8项目升级到jdk17——岁月云实战
  • 商品列表及商品详情展示
  • 使用where子句筛选记录
  • SQL Server查询计划操作符(7.3)——查询计划相关操作符(5)
  • C++中常用的十大排序方法之4——希尔排序
  • 扶摇计划--从失业的寒冬,慢慢的走出来
  • unity学习24:场景scene相关生成,加载,卸载,加载进度,异步加载场景等
  • [cg] 使用snapgragon 对UE5.3抓帧
  • 一元函数微积分的几何应用:二维平面光滑曲线的曲率公式
  • ISBN 号码——蓝桥杯
  • Spring Boot - 数据库集成06 - 集成ElasticSearch
  • 51单片机CLD1602显示万年历+闹钟+农历+整点报时
  • C++ 中的类(class)和对象(object)
  • 安卓通过网络获取位置的方法