AcWing 导弹防御系统 Python代码
url:https://www.acwing.com/problem/content/description/189/
至于题解有好多,即枚举所有数,考虑将当前数字放入上升子序列当中还是下降子序列当中。
y总的代码中是
bool dfs(int depth, int u, int su, int sd)
{
// 如果上升序列个数 + 下降序列个数 > 总个数是上限,则回溯
if (su + sd > depth) return false;
if (u == n) return true;// 枚举放到上升子序列中的情况
...
if (dfs(depth, u + 1, su, sd)) return true;
...
if (dfs(depth, u + 1, su + 1, sd)) return true;// 枚举放到下降子序列中的情况
...
if (dfs(depth, u + 1, su, sd)) return true;
...
if (dfs(depth, u + 1, su, sd + 1)) return true;
}return false;
int main(){
...
int depth = 0;
while(!dfs(depth,0,su,sd)) depth ++; #depth即为最后的答案
...
}
这样还是稍微有点难理解的,因为这样操作,在dfs()函数里有许多情况可以早早return,不需要判断下去。
但是我们知道的是这道题的时间复杂度是非常大的,剪枝优化在于得到的答案是否大于之前一直在更新的答案,如果已经大于之前得出的答案,那么这条路就没必要走了。
因此如果把depth写在dfs()函数里,你会发现少了许多return语句,意即许多东西还是要进行判断的,而不能早早返回。当然我个人认为这样子会更好理解。
Python代码如下:
inp = lambda: list(map(int, input().split()))
n, = inp()
def dfs(u, step, up, down):global ans, arr, nif step >= ans:return False # 回溯条件if u == n:ans = min(ans, step)return Trueflag = True # 需要创建子序列for i in range(len(up)):if up[i] < arr[u]:# 剪枝操作t = up[i] # 为复位做准备up[i] = arr[u]flag = False # 不需要新增子序列dfs(u + 1, step, up, down)up[i] = tbreakif flag: # 所有的上升子序列都不满足条件up.append(arr[u])dfs(u + 1, step+1, up, down)up.pop()flag = Truefor i in range(len(down)):if down[i] > arr[u]:t = down[i]down[i] = arr[u]flag = Falsedfs(u+1,step,up,down)down[i] = tbreakif flag:down.append(arr[u])dfs(u+1,step+1,up,down)down.pop()return Falsewhile n != 0:ans = float('inf')arr = inp()dfs(0,0,[],[])print(ans)n, = inp()
AcWing 导弹防御系统 Python代码相关推荐
- C++---最长上升子序列模型---导弹防御系统(每日一道算法2023.3.5)
注意事项: 本题的dp:"线性dp-最长上升子序列的长度" 本题的贪心(单调队列):"最长上升子序列模型-拦截导弹" 下面思路只讲如何运用这些东西来解这道题 强 ...
- 拦截导弹 导弹防御系统
拦截导弹 & 导弹防御系统 拦截导弹 导弹防御系统 拦截导弹 题目链接:acwing1010. 拦截导弹 题目描述: 输入输出: 分析: 第一个问题为输出最长递减子序列,由于导弹数在1000以 ...
- 导弹防御系统[导弹拦截系统]
导弹防御系统[dfs] 题目链接 引言(请忽略):今天是小白ACM集训的日子,然后数据结构实在是太难了,真是学不动了,然后就只能无助地去复习以前的题了,记得以前在SDUT程设二里面有一道题叫最少拦截系 ...
- 导弹防御系统,如何跟蜻蜓的大脑学习计算?
来源:大数据文摘 作者:Frances Chance 多雨的夏季,蜻蜓最为常见,这些美丽的生物的飞行速度极快,狩猎能力也极为出色:蜻蜓狩猎的成功率捕获了高达95% ,它们一天可以吃掉数百只蚊子. 这种 ...
- 问题 : 导弹防御系统
题目描述 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...
- CG14导弹防御系统
[问题描述] 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的 ...
- AcWing LIS相关问题 187 导弹防御系统
''' DFS枚举所有可能的元素放到上升序列或者下降序列的情况 '''ans = [0x7fffffff] # 最小序列总数 up = [0] * 60 # 上升序列的尾数数值 down = [0] ...
- 垃圾自动分拣系统python代码_Robot recycling 垃圾分拣机器人
本集内容 Robot recycling 垃圾分拣机器人 学习要点 有关 "technology 科技" 的词汇 边看边答 What percentage of stationar ...
- 垃圾自动分拣系统python代码_[HuskyLens]掌控垃圾分拣系统
360截图20200119220505036_副本.jpg (139.65 KB, 下载次数: 0) 2020-1-19 22:08 上传 2019年7月1日,被称为"史上最严"垃 ...
- 电话本系统python代码
phone_book={} while True: print("您好,欢迎进入通讯录!") print(" 1.添加联系人") print(" 2. ...
最新文章
- Ubuntu 想要更新源 报错 “E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)”
- UI设计掌握这些技巧,小白也能华丽变身
- GridSearchCV 与 RandomizedSearchCV 用法注意随机搜索可以自定义打分 or loss 函数
- DBSNMP和SYSMAN用户初始密码及正确的修改方式
- 二次元妹子五官画风都能改,周博磊团队用无监督方法控制GAN | CVPR 2021
- Russ Miles:被忽略的架构师和混沌工程
- git连接jenkins_开普勒云平台:如何配置gitlab与Jenkins
- Grunt上手指南(转)
- One账户多设备同步的数据库设计
- linux info命令详解,Linux info 命令简介
- ACM算法模板 · 一些常用的算法模板-模板合集(打比赛专用)
- vue实现在线客服功能(附完整代码)
- 使用CefSharp开发一个12306“安心刷票弹窗通知”工具
- 推荐几本图灵最新移动开发图书
- windows10的etc路径下没有hosts文件
- 修改主分区表给U盘分区
- 腾讯云轻量服务器Centos 7.6安装redis 5.0.4教程
- 巧学活用html4,巧用教材、活用教材
- 调用七牛云简单的上传附件的方法
- 驱动新手指南(帮助)
热门文章
- 高并发限流-漏桶算法和令牌桶算法
- 如果你读不完凯文凯利的《必然》,至少读完这120条书摘
- 开发人员的不断流动、让我们更加坚定信念,一定要控制好整个系统的底层架构、核心设计、日常质量检查工作
- DataGridViewCellStyle.Format 设置金额格式无作用解决方案
- DAY15:尚学堂高琪JAVA(129~131)队列,Enumeration和Hashtable
- SDUT 数据库系统概论 关系查询处理和查询优化
- 瞎琢磨先生のJava笔记之读取SpringBoot配置文件的几种方式
- 程序员毕业去大公司好还是小公司好?
- 指数基金日涨跌幅python_用Python验证指数基金定投策略
- Vue进阶(六十三):如何使浏览器打开时,默认的文档模式就是标准模式