| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 算法竞赛进阶指南 0x24 迭代加深 -> 正文阅读 |
|
[数据结构与算法]算法竞赛进阶指南 0x24 迭代加深 |
文章目录对于深度优先,如果答案在很浅的部位,但是整个搜索树过于深,那么就会寄掉。 但是对于广度优先,本来挺好,但是在队列里面存储太多的元素,到时爆。同时,广度优先也不容易存储数据。 对于迭代加深,就是限定层数进行搜索。当这一层没有答案的时候,把限定的层数增加,再次搜索。
AcWing170. 加成序列满足如下条件的序列 X(序列中元素被标号为 1、2、3…m)被称为“加成序列”:
你的任务是:给定一个整数 n,找出符合上述条件的长度 m 最小的“加成序列”。 如果有多个满足要求的答案,只需要找出任意一个可行解。 输入格式 输入包含多组测试用例。 每组测试用例占据一行,包含一个整数 n。 当输入为单行的 0 时,表示输入结束。 输出格式 对于每个测试用例,输出一个满足需求的整数序列,数字之间用空格隔开。 每个输出占一行。 数据范围 1≤n≤100 输入样例:
输出样例:
答案在浅层,因为通过[1, 2, 4, 8, 16, 32, 64, 128],可能的情况的层数少于8层。但是如果直接dfs,可能会整一个100层。 优化:
AcWing171. 送礼物达达帮翰翰给女生送礼物,翰翰一共准备了 N 个礼物,其中第 i 个礼物的重量是 G[i]。 达达的力气很大,他一次可以搬动重量之和不超过 W 的任意多个物品。 达达希望一次搬掉尽量重的一些物品,请你告诉达达在他的力气范围内一次性能搬动的最大重量是多少。 输入格式 第一行两个整数,分别代表 W 和 N。 以后 N 行,每行一个正整数表示 G[i]。 输出格式 仅一个整数,表示达达在他的力气范围内一次性能搬动的最大重量。 数据范围 1≤N≤46, 1≤W,G[i]≤231?1 输入样例:
输出样例:
“降维打击”这一道题目其实可以使用背包问题来做,先降维打击:
但是出事了:
所以一定要看清楚题目! 暴搜练习生:
还有一种情况是使用一个数字每次加一,然后通过每一位是不是一来决定对应的情况。 正二八经这一道题目采用双向搜索,先搜索前一半,然后再搜索后一半。 计算集合内元素相加不超过某一个子的方法
代码实现
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:51:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |