acwing算法提高之搜索--迭代加深DFS、双向DFS、IDA*

news/2024/7/20 21:37:43 标签: 算法, 深度优先, 迭代加深

目录

  • 1 专题介绍
  • 2 训练

1 专题介绍

本专题用来记录使用迭代加深DFS、双向DFS和IDA*算法求解的问题。

2 训练

题目1:170加成序列

C++代码如下,

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 110;

int n;
int path[N];

bool dfs(int u, int k) {
    if (u == k) return path[u - 1] == n;
    
    bool st[N] = {0};
    for (int i = u - 1; i >= 0; --i) {
        for (int j = i; j >= 0; --j) {
            int s = path[i] + path[j];
            if (s > n || s <= path[u - 1] || st[s]) continue;
            st[s] = true;
            path[u] = s;
            if (dfs(u + 1, k)) return true;
        }
    }
    return false;
}

int main() {
    path[0] = 1;
    while (cin >> n, n) {
        int k = 1;
        while (!dfs(1, k)) k++;
        
        for (int i = 0; i < k; ++i) cout << path[i] << ' ';
        cout << endl;
    }
    
    return 0;
}

题目2


http://www.niftyadmin.cn/n/5446549.html

相关文章

Hive自定义GenericUDF函数

Hive自定义GenericUDF函数 当创建自定义函数时&#xff0c;推荐使用 GenericUDF 类而不是 UDF 类&#xff0c;因为 GenericUDF 提供了更灵活的功能和更好的性能。以下是使用 GenericUDF 类创建自定义函数的步骤&#xff1a; 编写Java函数逻辑&#xff1a;编写继承自 GenericUDF…

远程操控Linux:学习Linux常用命令模块,开启你的远程办公之旅

在当前时代&#xff0c;远程办公和学习已经成为了一种趋势。 而Linux作为开源、稳定、高效的操作系统&#xff0c;更是吸引了无数技术爱好者和开发者。但很多时候&#xff0c;我们可能因为种种原因无法随时随地访问到Linux系统&#xff0c;导致学习进程受阻。现在&#xff0c;…

国庆节是星期几

1949 年的国庆节&#xff08;10 月 1 日&#xff09;是星期六, 输入一个大于 1949 年的年份 n 输出 n 年 的 10 月 1 日是星期几 星期一 输出 1 星期二 输出 2 ... 星期日 输出 0 输入 1950 样例输入 2019 样例输出 2 提示 计算 1949 年以后每年的天数(闰年 366 天…

Android Selinux详解[七]--如何给可执行程序bin加标签

经过前面几篇文章的介绍&#xff0c;你应该对Selinux有一定的了解了&#xff0c;现在我们就来实战一下。 你可能会在工作的过程遇到要给可执行程序bin加标签的需求&#xff0c;以下来讲解一下怎么给bin加标签 1. 一个bin通常是通过adb shell bin名字拉起来的&#xff0c;拉起…

Red Hat Enterprise Linux Server release 6.7 挂载虚拟光驱ISO文件

Red Hat Enterprise Linux Server release 6.7 挂载虚拟光驱ISO文件 在Linux中&#xff0c;可以使用mount命令来挂载ISO文件。 首先&#xff0c;确保已经下载了所需的ISO镜像文件并将其放置在合适的位置&#xff08;比如/home目录&#xff09;。 打开终端或控制台&#xff0…

Wpf-自定义控件波纹Button

使用用户控件&#xff0c;继承Button 前端代码 <Button x:Class"WpfApp1.SuperButton"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://sche…

【python开发】并发编程和网络编程的结合+并发和并行概念区别+单例模式通过类来实现

知识补充 一、并发编程&网络编程&#xff08;一&#xff09;多线程socket服务端&#xff08;二&#xff09;多进程&socket服务端 二、并发和并行三、单例模式&#xff08;一&#xff09;基于__new__方法来实现&#xff08;二&#xff09;基于模块导入方法 四、补充题目…

外包管理系统又称科技外包管理系统

外包管理系统是一种专门用于管理外包业务的信息系统。它提供了一系列功能和工具&#xff0c;帮助企业有效地管理与外包相关的各个方面&#xff0c;包括外包项目的策划、执行、监控和评估等。 以下是外包管理系统的一些主要特点和功能&#xff1a; 项目管理&#xff1a;系统支…