子集树与排列树的构造

排列树的构造:

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

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

  • 目标函数是: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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二级指针简单介绍

我们之前学习的&#xff1a;变量的地址是存入指针变量中的&#xff0c;然而指针变量也是变量&#xff0c;是变量就有地址&#xff0c;那么指针变量的地址存放在哪里 &#xff1f; 这也就是二级指针 #include<stdio.h> int main() {int a10;int*p&a;int**pp&p;re…

微软如何打造数字零售力航母系列科普12 - 使用Microsoft Fabric将客户数据带入人工智能时代

【世界上充斥着数据&#xff0c;在过去的2年里&#xff0c;我们都看到了人工智能如何有潜力彻底改变我们的日常业务。人们对利用生成性人工智能体验的力量的需求越来越大&#xff0c;但这样做需要一个干净的数据庄园&#xff0c;而且可能会因为各种技术堆栈、分散的团队和无处不…

如何让Google快速收录?

要让Google快速收录你的网站&#xff0c;可以考虑使用GSI服务&#xff0c;这是一种专门设计来加速网站被Google搜索引擎收录的服务&#xff0c;下面详细解释GSI服务的基本原理和具体好处&#xff1a; GSI服务通过一种名为GPC爬虫池的系统实现&#xff0c;这个系统是基于对Goog…

eBPF可观测之网络流量控制和管理traffic control浅尝

目录 工程背景 环境准备 安装工具​​​ 安装依赖包 安装C依赖库 操作步骤 目录结构 代码展示 效果展示 拓展提升 工程背景 首先发表一个"暴论" eBPF在可观测方面的应用&#xff0c;就是各种google。 不需要学习内核&#xff0c;只要掌握ebpf开发套路。…

什么是TLAB?

这个得从内存申请说起。 一般而言生成对象需要向堆中的新生代申请内存空间&#xff0c;而堆又是全局共享的&#xff0c;像新生代内存又是规整的&#xff0c;是通过一个指针来划分的。 内存是紧凑的&#xff0c;新对象创建指针就右移对象大小size即可&#xff0c;这叫指针加法…

怎么通过互联网远程控制电脑?

远程访问又称为网络远程控制&#xff0c;它使用户能够通过互联网连接两台设备以解决问题。进行控制的电脑称为控制端&#xff0c;被控制的电脑则称为被控端。在远程访问过程中&#xff0c;控制端电脑掌握整个连接的操作。远程控制软件会捕获被控端电脑的操作&#xff0c;并在主…

绘画智能体分享

这是您请求的故宫雪景图&#xff0c;角落有一只可爱的胖猫&#xff0c;采用了水墨画风格&#xff0c;类似于张大千的作品。希望您喜欢这幅画&#xff01; &#x1f3a8; 选项 1【转变风格】——将这幅画转变为梵高的后印象派风格&#xff0c;增添一些梵高特有的笔触和色彩。 &…

Superset二次开发之Github项目推送到GitLab仓库

以下是从GitHub克隆Superset项目并将其推送到GitLab的详细操作步骤 lab 地址: xxx lab 配置: 生成SSH密钥 ssh-keygen -t rsa -b 4096 -C "邮箱地址" 默认情况下密钥会生成在~/.ssh (/c/Users/Administrator/.ssh/id_rsa)目录下。 公钥添加到GitLab: 打开公钥文件…

短时间内如何顺利通过 Java 面试?

今天我们来探讨一个重要的话题&#xff1a;短时间内如何顺利通过 Java 面试&#xff1f; 在此之前&#xff0c;我正在精心编写一套完全面向小白的 Java 自学教程&#xff0c;我相信这套教程会非常适合正在努力提升的你。教程里面涵盖了丰富全面的编程教学内容、详细生动的视频…

上网行为监控软件大盘点:好用的上网行为管理软件一览

这是后台私信来的客户发来的图片&#xff0c;他们老板想要给自己公司安装上网行为监控软件。 可见&#xff0c;企业对员工上网行为的监控与管理已经是很多企业都开始重视的问题。 上网行为管理软件能够帮助企业确保网络资源得到合理分配&#xff0c;提升工作效率&#xff0c;…

ch5链路层和局域网

回顾TCP/IP参考模型&#xff0c;明确链路层和物理层在整个模型中的地位&#xff0c;简要提出链路层要解决的问题是单段链路的数据传输&#xff0c;物理层解决的是数字信号与电气信号之间的相互转换。 链路层概述 节点&#xff1a;主机和路由器(包括网桥和交换机) 链路&#xf…

QT 信号和槽教程,窗体和控件对象之间的沟通一般都使用信号和槽

Qt的信号和槽&#xff08;Signals and Slots&#xff09;机制是一种强大的对象间通信方式&#xff0c;它允许对象在完全解耦的情况下相互通信。以下是关于Qt信号和槽的简明教程&#xff1a; 基本概念 信号&#xff08;Signal&#xff09;&#xff1a;信号是由Qt对象发出的通知…

(2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少

LoRA Learns Less and Forgets Less 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 1. 引言 2. 背景 3. 实验设置 3.2 使用编码和数学基准测试来衡量学习&#xff08;目标域…

jpeg编码学习

正点原子stm32教程提到过jpeg解码库libjpeg&#xff0c;但是没有提到jpeg编码&#xff0c;我也好奇jpeg编码怎么实现&#xff0c;用代码怎么生成jpeg文件的。所以最近学习了jpeg编码&#xff0c;在这里做记录。 参考文章 jpeg图片格式详解 https://blog.csdn.net/yun_hen/art…

一文了解-电子公司组织架构

以下仅为一般研发设计公司的岗位&#xff0c; 不包括工厂。 总经理 柏柏有话说: 不多说&#xff0c;人中龙凤、群山俯首、众神膜拜&#xff01; 项目总监 产品总监 软件总监 测试总监 销售总监 人事总监 财务总监 采购总监 柏柏有话说: 这么说吧&#xff0c; 柏柏的前同龄同事…

共计3万字!从零开始创建一个小规模的稳定扩散模型!

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

MYSQL数据库细节详细分析

MYSQL数据库的数据类型(一般只需要用到这些) 整型类型&#xff1a;用于存储整数值&#xff0c;可以选择不同的大小范围来适应特定的整数值。 TINYINTSMALLINTMEDIUMINTINTBIGINT 浮点型类型&#xff1a;用于存储带有小数部分的数值&#xff0c;提供了单精度&#xff08;FLOA…

YOLOv5改进 | 卷积模块 | 将Conv替换为轻量化的GSConv【原理 + 完整代码】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 目标检测是计算机视觉中一个重要的下游任务。对于边缘盒子的计算平台来说&#xff0c;一个大型模型很难实现实时检测的要求。而且&#xff0…

全志H616 通过Cedrus和v4l2_request API实现硬件编解码加速(香橙派zero2)

编译安装或加载cedrus驱动模块&#xff0c;加载v4l2-mem2mem Sunxi-Cedrus 致力于为全志 SoC 提供硬件加速的视频解码和编码支持&#xff0c;并将其引入主线 Linux 内核。此外&#xff0c;还为典型的基于 GNU/Linux 的系统提供了与内核驱动程序接口的其他用户空间组件。 Sunx…

北邮22级信通院DSP:IIR_DF系统3.0版:从H(p)到H(s):一种更为严谨精确的运算模式

北邮22信通一枚~ 跟随课程进度更新北邮信通院DSP的笔记、代码和文章&#xff0c;欢迎关注~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院DSP_青山入墨雨如画的博客-CSDN博客 承接上一篇博客 北邮22级信通院DSP&#xff1a;IIR_DF系统2.0版&#xff1a;…