子集树与排列树的构造

排列树的构造:

无重复画法:一条线前面出现的不再出现。

有重复画法:一条线前面出现的不再出现,如果仅仅只是相似可以出现;兄弟不能相似。

  • 目标函数是:cnt == 总元素个数
  • 分支策略是全遍历,不过存在约束
  • 关键在于记录当前结点所选择的数,下一层别选了,换到兄弟结点之前要回溯。这里防的是儿子,建议这里的记录结构要么是全局性的,要么是参数性的。
  • 如果存在重复元素的话,就比较麻烦一点:也是要记录当前结点所选择的数,但是换到兄弟结点之前不用回溯,因为防的就是兄弟。所以这里的记录结构是局部性的。
  • 最后,还有一点要强调,长得一模一样的兄弟不允许(1223和1223重了),所以判断的依据在于值;同一个人不能多次出现在一条辈分线上(1223排序,你不能12232),所以判断的依据在于编号,长得像的人可以在同一条辈分线上(1223可以)。
#include<bits/stdc++.h>
using namespace std;

string str;
int n;
int sign_for_son[220];

void dfs(int cnt, string result)
{
    if(cnt > n)
    {
        cout << result << endl;
        return;
    }

    int sign_for_bro[220] = {0};
    for(int i = 0; i < n; i++)
    {
        if(sign_for_son[i]) continue;
        if(sign_for_bro[str[i]]) continue;

        sign_for_son[i] = 1;
        string temp = result;
        result += str[i];
        dfs(cnt+1, result);
        result = temp;
        sign_for_son[i] = 0;

        sign_for_bro[str[i]] = 1;
    }

    return;
}
int main()
{
    cin >> str;
    n = str.size();

    dfs(1, "");

    return 0;
}

组合树(这里我默认所有的元素都不相同,即便事实相同)的构造:

如果不限制数量,那么组合数就成了子集树:

1,0子集树:

画法:01法,每层考虑一个数

  • 目标函数是:cnt == 总元素个数
  • 分支策略是固定不变的:取,不取
  • 不需要记录
#include<bits/stdc++.h>
using namespace std;

string str;
int n;

void dfs(int cnt, string result)
{
    if(cnt > n)
    {
        cout << result << endl;
        return;
    }

    dfs(cnt+1, result);

    string temp = result;
    result += str[cnt-1];
    dfs(cnt+1, result);
    result = temp;

    return;
}
int main()
{
    cin >> str;
    n = str.size();

    dfs(1, "");

    return 0;
}

如果限制数量:

画法:从小到大排序来遍历;儿子必须比父亲大(编号大值大一样)

  • 目标函数是:cnt == 限制数量
  • 分支策略也是全遍历,但与排列树存在不同的约束
  • 这里不是记录,而是需要排列:当我们按照从小到大来遍历(先sort),可以保证前面的兄弟小于当前的,当我们又保证儿子比父亲大(i = last+1),那么儿子不会和叔叔伯伯雷同,也就不会出现12、21的重复了。
#include<bits/stdc++.h>
using namespace std;

int num[220];
int n, m;

void dfs(int cnt, int last, string result)
{
    if(cnt > m)
    {
        if(result.size() == m) cout << result << endl;
        return;
    }
    for(int i = last+1; i <= n; i++)
    {
        string temp = result;
        result += num[i] + '0';
        dfs(cnt+1, i, result);
        result = temp;
    }
    return;
}
int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> num[i];
    cin >> m;

    sort(num+1, num+n+1);

    dfs(1, 0, "");

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/669774.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI播客下载:a16z (主题为AI、web3、生物技术等风险投资)

a16z播客是一个综合性的科技和创新领域的媒体平台&#xff0c;通过多种节目形式和丰富的内容&#xff0c;为广大听众提供了一个了解最新科技趋势和创新思维的窗口。a16z播客是由安德里森霍罗威茨&#xff08;Andreessen Horowitz&#xff0c;简称a16z&#xff09;推出的一个科技…

Resilience4j结合微服务出现的异常

Resilience4j结合微服务出现的异常 1、retry未生效 由于支持aop&#xff0c;所以要引入aop的依赖。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>2、circ…

20240601在Toybrick的TB-RK3588开发板上跑IPC的SDK并确认eth0

20240601在Toybrick的TB-RK3588开发板上跑IPC的SDK并确认eth0 2024/6/1 20:06 ADB的详细LOG&#xff1a; Microsoft Windows [版本 10.0.22621.3296] (c) Microsoft Corporation。保留所有权利。 C:\Users\QQ>adb shell adb server version (40) doesnt match this client …

FreeRtos进阶——通用链表的实现方式

通用链表实现方式&#xff08;一&#xff09; struct node_t {struct node_t *next; };struct person {struct node_t node;char *name;int age; };struct dog {struct node_t node;char *name;int age;char *class; };在此链表中&#xff0c;node结构体被放在了最前面&#x…

民国漫画杂志《时代漫画》第37期.PDF

时代漫画37.PDF: https://url03.ctfile.com/f/1779803-1248636302-c017ee?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

创刊即王炸?首个IF近7分,稳坐中科院1区!同领域全球第一!

【欧亚科睿学术】 01 期刊基本概况 【期刊类型】经济类SSCI 【出版社】SPRINGER出版社 【期刊概况】IF&#xff1a;8.0-9.0&#xff0c;JCR1区&#xff0c;中科院1区 【版面类型】正刊&#xff0c;仅少量版面 【预警情况】2020-2024年无预警记录 【收录年份】2016年被WO…

【实战教程】构建可复用的 Spring Boot starter 微服务组件

案例 Demo&#xff1a;https://gitee.com/regexpei/coding-trainee/tree/demo/20240526_starter 介绍 在 Spring Boot 中&#xff0c;starter 启动依赖就像一个“开箱即用”的工具箱&#xff0c;它包含了第三方组件的配置和依赖&#xff0c;让我们无需手动配置和添加这些组件。…

Pandas 使用 concat 数据合并你学会了吗?

1. 使用pd.concat()级联 pandas使用pd.concat函数&#xff0c;与np.concatenate函数类似 # 导包import numpy as npimport pandas as pd​# 为方便讲解&#xff0c;我们首先定义一个生成DataFrame的函数def make_df(indexs,columns): data [[str(j)str(i) for j in colum…

Linux 36.3@Jetson Orin Nano之系统安装

Linux 36.3Jetson Orin Nano之系统安装 1. 源由2. 命令行烧录Step 1&#xff1a;下载Linux 36.3安装程序Step 2&#xff1a;下载Linux 36.3根文件系统Step 3&#xff1a;解压Linux 36.3安装程序Step 4&#xff1a;解压Linux 36.3根文件系统Step 5&#xff1a;安装应用程序Step …

【二进制部署k8s-1.29.4】七、验证master的安装

文章目录 简介 一.确认kubectl命令是否正常运行二.确认etcd安装是否正常运行三.确认kube-apiserver,kube-controller-manager,kube-scheduler安装是否正常四.配置apiserver和kubelet的访问授权五.master端安装脚本4.1.安装master端所需文件4.2.master快捷安装脚本 简介 本章节主…

翼龙面板是什么,如何进行搭建

翼龙面板是一个开源的&#xff0c;用于游戏服务器管理的程序&#xff0c;可以方便地在网页界面中创建Minecraft&#xff0c;起源引擎游戏和Teamspeak3 服务器。 它使用前后端程序&#xff0c;因此可以创建多后端节点&#xff0c;对游戏服务器和服务器节点进行统一管理。 对游戏…

测试onlyoffice在线预览文件功能

HTML示例代码 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><title>测试onlyoffice在线预览文件功能</title><script type"text/javascript" src"http://onlyoffice服务器ip:端口/…

c++ string模拟实现

模拟实现string类&#xff0c;里面包含四个成员变量&#xff0c;第一个是指向字符数组的指针&#xff0c;第二个变量是目前存放了多少个字符&#xff0c;第三个变量为这个字符数组的容量的大小。最后一个为静态成员变量npos。 注意&#xff1a;一个const 修饰的整型&#xff0…

vs2019 无法打开QT的UI文件

/* * --------------------------- Microsoft Visual StudioQt5.15.2\5.15.2\msvc2019_64 --------------------------- D:\QT_Project_vs\QtWidgetsApplication1\QtWidgetsApplication1\QtWidgetsApplication1.ui 无法打开文件。 --------------------------- 确定 -------…

人工智能学习笔记(2):认识和安装Stable Diffusion

人工智能学习笔记&#xff08;2&#xff09;&#xff1a;认识和安装Stable Diffusion 文章目录 人工智能学习笔记&#xff08;2&#xff09;&#xff1a;认识和安装Stable DiffusionStable Diffusion的起源和发展历程Stable Diffusion的应用场景基本原理文本到图像的转换过程潜…

全网唯一:触摸精灵iOS版纯离线本地文字识别插件

目的 触摸精灵iOS是一款可以模拟鼠标和键盘操作的自动化工具。它可以帮助用户自动完成一些重复的、繁琐的任务&#xff0c;节省大量人工操作的时间。但触摸精灵的图色功能比较单一&#xff0c;无法识别屏幕上的图像&#xff0c;根据图像的变化自动执行相应的操作。本篇文章主要…

vs2019 QT UI 添加新成员或者控件代码不提示问题解决方法

右键点击头文件&#xff0c;添加ui的头文件 添加现有项 找到uic目录的头文件 打开ui,QtWidgetsApplication2.ui,进行测试 修改一个名字&#xff1a; 重点&#xff1a; 设置一个布局&#xff1a; 点击生成解决方案&#xff1a; 以后每次添加控件后&#xff0c;记得点击保存 这样…

Matlab|基于粒子群算法优化Kmeans聚类的居民用电行为分析

目录 主要内容 部分代码 结果一览 下载链接 主要内容 在我们研究电力系统优化调度模型的过程中&#xff0c;由于每天负荷和分布式电源出力随机性和不确定性&#xff0c;可能会优化出很多的结果&#xff0c;但是经济调度模型试图做到通用策略&#xff0c;同样的策…

hot100 -- 回溯(下)

&#x1f442; ​​​​​​​▶ 幸福就是 (163.com) &#x1f442; ▶ 当爱在靠近 (163.com) 目录 &#x1f6a9;括号生成 AC DFS &#x1f33c;单词搜索 AC DFS &#x1f382;分割回文串 AC DFSDP AC DFS记忆化 &#x1f33c;N 皇后 AC DFS &#x1f6a9;括号…

TS38.300中的切换流程(很一般)

本文根据3GPP R18 TS 38.300第9.2.3节整理 切换(Handover)是移动终端(UE)进入RRC_CONNECTED状态后在不同服务小区(Cell)之间保持与网络联系唯一手段&#xff0c;期间首先通过控制面(C-Plane)进行无线测量、切换协商及触发等&#xff1b;为此3GPP在TS38.300中定义如下。 RAN系统…