回溯法--符号三角形(杂记)

news2024/11/28 4:33:28

回溯法说来简单,写起来难,真的是要愁死。

回溯法有两种模板--子集树、排列树

5.4符号三角形--dfs

计算多少个满足条件的符号三角形,同号下面为“+”,异号下面为“-”。

根据异或的规则我们令“+”=0,“-”=1,(异或的运算规则:相同取0,相异取1)正好异或的规则满足题意,并且方便计数。

0^0=0

0^1=1

1^1=0

1^0=1

我们知道,第一行的符号确定了,后面的都确定了。所以需要遍历第一行的所有的“+”号和“-”号。

第一行一共有n和符号,变幻每个位置的符号,就是个叶子。

观察发现:满足条件的所有三角形中除了初始n=3个字符的三角形,其他所有满足结果要求的子三角形中,+和-的个数都是相同的。(但是最后输出的时候n=3有四种结果,也是对的,不知道为什么我第一次想的时候,这个n=3怎么不对了,可能是脑子有点小毛病)

下面列出n=3的四种情况

0 0 1

0 1

1

+ + -

+ -

-

0 1 0

1 1

0

+ - +

- -

+

1 0 0

1 0

1

- + +

- +

-

1 1 1

0 0

0

- - -

+ +

+

回溯的主要思想:

用n元组x[1:n]表示符号三角形的第一行的n个符号,当x[i]=1时,表示符号三角形的第一行的第i个符号为“+”;当x[i]=0时,表示符号三角形的第一行的第i个符号为“-”;1<=i<=n。

由于x[i]是二值的。所以在用回溯法解符号三角形问题时,可以用一棵完全二叉树来表示其解空间。

在符号三角形的第一行的前i个符号x[1:i]确定后,就确定了一个有i(i+1)/2个符号组成的符号三角形。

下一步确定x[i+1]的值后,只要在前面已确定的符号三角形的右边加一条边,就可以拓展为x[1:i+1]所对应的符号三角形。最终由x[1:n]所确定的符号三角形包含的“+”个数与“-”同为n(n+1)/4.

因此,在回溯可将“+”、“-”个数均不超过n(n+1)/4为约束条件。

同时,对于给定的n当n(n+1)/2为奇数时,显然不存在“+”和“-”个数相同的符号三角形。

剪枝:不等的直接return,如果cnt>half || (t*(t-1)/2-cnt)>half,当前的第一行第t个符号以前所对应的三角形,减号的个数大于一半了或者是加号的个数大于一半了都直接return。另外一个是要特判初始的总数,奇数肯定是不行的。

然后注意回溯的时候对sum值进行修改。剩下的就是dfs深度优先搜索的功底了。

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

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

相关文章

postgresql 启用ssl安全连接方式

SSL的验证流程 利用openssl环境自制证书 CA 证书签发 创建私钥ca.key,使用des3算法,有效期2048天 openssl genrsa -des3 -out ca.key 2048生成根CA证书请求&#xff08;.csr&#xff09; openssl req -new -key ca.key -out ca.csr -subj "/CCN/STGuangDong/LGuangZhou…

Cloudflare免费版不支持cname解析解决办法

最近调整CDN&#xff0c;使用云盾CDN的话基本上节点都在国内&#xff0c;国外访问就比较难了&#xff0c;虽然我们的站国外用户基本没有&#xff0c;但作为一个有大抱负的站长&#xff0c;眼界必须得宽&#xff0c;必须得支持国外访问才行&#xff01;说起国外免费CDN&#xff…

iOS开发之Code:-402653103,Code:5

问题一&#xff1a;Code&#xff1a;-402653103 Demo中添加了第三方库&#xff0c;然后运行Demo时&#xff0c;总是运行不起来&#xff0c;现象如下&#xff1a; 遇到这种问题常见的几种方式&#xff1a; 方式一&#xff1a;command shift K&#xff0c;清理Xcode缓存&…

常用的字符串与内存操作函数(1)

Tips 1. 2. 3. 在进行数值计算的时候&#xff0c;补码能算对&#xff0c;因此计算机里面放的都是补码&#xff0c;运算的对象都是补码 但是与真实数值吻合的是原码&#xff0c;因此打印&#xff0c;求值等都要转化为原码 4. for (exp1 ; exp2 ; exp3)&#xff0c;是先…

从0到1完成一个Vue后台管理项目(十九、地图区域样式设置、区域文字和立体设置)

往期 从0到1完成一个Vue后台管理项目&#xff08;一、创建项目&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;二、使用element-ui&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;三、使用SCSS/LESS&#xff0c;安装图标库&#xff09; 从0到1完成一个Vu…

上半年要写的博客文章25

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

分享86个NET源码,总有一款适合您

NET源码 分享86个NET源码&#xff0c;总有一款适合您 链接&#xff1a;https://pan.baidu.com/s/1JOY-9pJIM7sUhafxupMaZw?pwdfs2y 提取码&#xff1a;fs2y 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c;大家下载…

Blender里的三种绑定:(一)主从绑定

文章目录Blender里的三种绑定.主从绑定.进行物体绑定.进行顶点绑定.解除绑定.保持变换.无反向.进行晶格绑定.Blender里的三种绑定. 1 Blender中一共有三种绑定模式&#xff0c;分别是 主从绑定&#xff0c;约束&#xff0c;骨骼 主从绑定. 1 主从绑定即父子关系&#xff0c;…

【Spark常用算子合集】一文搞定spark中的常用转换与行动算子

&#x1f680; 作者 &#xff1a;“大数据小禅” &#x1f680;文章简介&#xff1a;本篇文章属于Spark系列文章&#xff0c;专栏将会记录从spark基础到进阶的内容 &#x1f680; 内容涉及到Spark的入门集群搭建&#xff0c;核心组件&#xff0c;RDD&#xff0c;算子的使用&…

【数据结构与算法】——第六章:图

文章目录1、图的定义1.1 图的其他定义1.2 图的顶点与边之间的关系1.3 连通图相关术语2、图的存储结构2.1 邻接矩阵2.2 邻接表3、图的遍历3.1 深度优先遍历3.2 广度优先遍历4、最小生成树4.1 普利姆算法(Prim)4.2 克鲁斯卡尔(kruskal)5、最短路径5.1 迪杰斯特拉(Dijkstra)算法5.…

Sentinel限流-@SentinelResource注解配置

SentinelResource 配置-上 &#xff08;按资源名配置限流规则&#xff09; 1&#xff09; Sentinel 控制台配置流控规则&#xff1a; 2&#xff09;java 代码&#xff1a; GetMapping("/byResource")SentinelResource(value "byResource", blockHandler …

Django项目——通过APIView实现API访问

前提 该文章在已有项目的基础上进行修改 https://blog.csdn.net/qq_38122800/article/details/128583379?spm1001.2014.3001.5502 1、配置序列化器 序列化器包含序列化和反序列化两个过程,简单点理解就是 序列化 : 将从数据库中查的数据变为前端页面可以接受的json数据 反…

Odoo 16 企业版手册 - 库存管理之重订货规则

重订货规则 在Odoo 库存模块中&#xff0c;您可以配置一组规则&#xff0c;帮助您确保库存永远不会用完。Odoo将尝试使用重订货规则在您的库存中保持至少最低数量的产品。让我们看看此功能在Odoo 16中是如何工作的。为此&#xff0c;您可以从库存模块中选择一个可存储的产品。 …

qt学习记录

一、新建项目时只有pro文件而没有其他文件 此时需要在Kits界面将所有编译器选择&#xff0c;即可出现其他文件 二、QMainWindow、QWidget、QDialog的区别 ①QWidget继承于QObject和QPaintDevice&#xff0c;QDialog和QMainWindow则继承于QWidget&#xff0c;QDialog、QMainWi…

[ 数据结构 ] 弗洛伊德算法(Floyd)--------最短路径问题

0 Floyd算法介绍 和 Dijkstra 算法一样&#xff0c;弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978 年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特弗洛伊德命名弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路…

新应用——信息化财务管理,一站式满足多个需求

财务管理应用是企业为了适应当下社会环境提出的一种将财务管理进行信息化管理的方法&#xff0c;与传统财务管理模式不同&#xff0c;将各类业务数据编制为电子数据&#xff0c;便于财务人员查找数据内容&#xff0c;可以更高效的开展工作。百数应用中心的财务管理应用涵盖了项…

机器学习笔记之深度信念网络(二)模型构建思想(RBM叠加结构)

机器学习笔记之深度信念网络——模型构建思想引言回顾&#xff1a;深度信念网络的结构表示解析RBM隐变量的先验概率通过模型学习隐变量的先验概率引言 上一节介绍了深度信念网络的模型表示&#xff0c;本节将介绍深度信念网络的模型构建思想——受限玻尔兹曼机叠加结构的基本逻…

Flutter多分支打包持续化集成

一、使用效果演示 1.1、选择参数打包 以下为参数使用说明。 packingType枚举 android、ios android ios android&ios (新功能&#xff1a;并行打包)备注&#xff1a; android、ios&#xff1a;串行打包&#xff0c;即先打一个再打一个 android&ios&#xff1a;为并行…

与香港财政司司长同台,欧科云链在这场峰会上都说了啥?

今天&#xff0c;POWER 2023香港Web3创新者峰会在中国香港如期召开&#xff0c;香港特别行政区政府财政司司长陈茂波、财经事务及库务局副局长陈浩濂、全国政协委员、立法会议员吴杰庄等港府要员出席峰会。 作为本场峰会的受邀企业&#xff0c;欧科云链控股(01499.HK)公司执行董…

Kernel Pwn基础教程之 Double Fetch

一、前言 Double Fetch是一种条件竞争类型的漏洞&#xff0c;其主要形成的原因是由于用户态与内核态之间的数据在进行交互时存在时间差&#xff0c;我们在先前的学习中有了解到内核在从用户态中获取数据时会使用函数copy_from_user&#xff0c;而如果要拷贝的数据过于复杂的话…