计蒜客课程系列:统计三角形(DFS+哈希状态存储标记)

华为OD机试 新系统 双机位C卷 往年真题 机考题库(持续收录中)以及算法考点详解(Python/JS/C/C++) 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释发现新题目,随时更新。 阅读详情

Link:http://www.jisuanke.com/course/8/348


给N根不同长度的木棍,求这些木棍一共能拼出多少个不同的不等边三角形。注意在拼三角形的时候一定要用上所有的N根木棍。不同的定义是至少有一条边的长度不相同;不等边的定义是三条边都不相等。


输入格式:
 
第一行为数据组数T,(1<=T<=15)。
接下来每行数据占两行,第一行为木棍的数量N(1<=N<=15)
第二行有N个正整数li(1<=li<100),表示N个木棍的长度。保证每个长度都不相同。


输出格式:每组数据输出一个非负整数,表示能组成的不同的三角形个数。


样例输入:




1
3
2 3 4


样例输出:


1


AC code:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,l[15];//n表示木棍数量,l数组中的元素表示每根木棍的长度。
bool h[10000];//定义数组h表示一个三角形的方案是否已经存在过。因为三条边总长度就是所有木棍的长度,也就是固//定的,所以只要确定两条边的长度就能知道第三条边的长度。所以可以用哈希存储将三角形方案表示为第一条边的//长度*100+第二条边的长度就好。
bool is_triangle(int a,int b,int c){//判断三条边能否构成三角形的函数:首先三角形要没出现过,其次每条边长度一//定要比0大,并且两边之和大于第三边。
    return !h[a*100+b]&&a&&b&&c&&a+b>c&&a+c>b
        &&b+c>a&&(h[a*100+b]=true);
}
/*接下来就是深搜,按照比较自然的思路,就是枚举每根木棍放到三堆里的哪一堆中,直到把所有木棍都放到了三堆之一中,再去判断三对内所有木棍的长度和作为三角形的边长是否合法即可。所以,我们搜索的时候要保存枚举到第几根木棍,以及三堆木棍当前的总长度。*/
int dfs(int index,int a,int b,int c){
/*深搜的两个重要元素:一是递归,一是终止。如果每枚举过一个木棍选择的集合后,index就会加1。所以index初始时为0,当index值加到木棍总数量n之后就终止迭代。*/
    if(index==n){
        return a<b&&b<c&&is_triangle(a,b,c);
    }
    return dfs(index+1,a+l[index],b,c)
        +dfs(index+1,a,b+l[index],c)
        +dfs(index+1,a,b,c+l[index]);
}
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        for(int i=0;i<n;++i){
            scanf("%d",&l[i]);
    }
    memset(h,0,sizeof(h));
    printf("%d\n",dfs(0,0,0,0));
    }
    return 0;
}


一文搞懂深度学习:最全神经网络介绍 本文是深度学习系列文章的第二篇,我们将深入探讨各种类型的人工神经网络,探索它们独特的特性和应用。 阅读详情

相关推荐

Dev C++调试程序方法详解

Dev C++调试程序方法详解

weixin_70641798的博客 1万+

【计蒜客】等边三角形

解法一: #include<bits/stdc++.h> using namespace std; const int N=25; int n,sum; //n木棍数,sum所有木棍总长度 int l[N],vis[N];//l[]存储木棍,vis[]标记木棍 bool f; void dfs(int s,int cnt,int st){ //s当前所造的木棍长度,cnt造好了几根木棍,st从哪根木棍开始,因为1,2和2,1是一样的,所以从下一根开始,可以减少搜索次数。 if(f){.

qq_43531919的博客 402

不同比例尺地质数据共享

包含20w、25w、100w、250w比例尺地质数据共享。

sinat_38828898的博客 2309

计蒜客——等边三角形

蒜头君手上有一些小木棍,它们长短不一,蒜头君想用这些木棍拼出一个等边三角形,并且每根木棍都要用到。 例如,蒜头君手上有长度为 1,2,3,3 的4根木棍,他可以让长度为1,2 的木棍组成一条边,另外 2 跟分别组成 2 条边,拼成一个边长为 3 的等边三角形。蒜头君希望你提前告诉他能不能拼出来,免得白费功夫。 输入格式 首先输入一个整数 n(3≤n≤20),表示木棍数量,接下来输入 n 根木棍的长...

weixin_44336971的博客 443

pytorch图像分类篇: 花分类数据集下载和AlexNet网络搭建训练

一、花分类数据集下载 data_setdata_set该文件夹是用来存放训练数据的目录 使用步骤如下: (1)在data_set文件夹下创建新文件夹"flower_data" (2)点击链接下载花分类数据集 (3)解压数据集到flower_data文件夹下 (4)执行"flower_data.py"脚本自动将数据集划分成训练集train和验证集val ├── flower_data ├── flower_photos(解压的数据集文件夹,3670个样本) ...

橙子的博客 8218

educoder实训——计算几何形状的表面积与体积

educoder python实训

qq_41234663的博客 1230

三角形(哈希函数)

实验任务 给你 n 个三角形,每个三角形有一个优雅值, 然后给出一个询问,每次询问一个三角形, 求与询问的三角形,相似的三角形中的优雅值最大是多少。 ★数据输入 第一行输入包括 n 一个数字, 接下来 n 行,每行四个整数数字 a,b,c,val 表示三条边,以及优美值 之后输入一个数字 m 之后 m 行,每行三个数字 a,b,c,表示询问的三角形。 ★数据输出 输出 m 行,如果查询的三角形不在...

weixin_30602505的博客 438

【通信】多径衰落信道的matlab仿真

1 简介 2 部分代码 clearf_c=1e3; %carrier frequency(no modulation)time_1 = (linspace (0, 10, 1000)); %timesignal_in = sin (2 * pi *f_c* time_1); %sine wave plot (time_1, signal_in, 'b');grid on;

qq_59747472的博客 1382

TriangleCount三角形计数

Graphx作为Spark的图计算组件,提供了丰富的图操作接口,以及6个常用的算法(在graphx lib中)。这里简单介绍下三角形计数TriangleCount算法原理;TriangleCount算法“统计每个顶点所在的三角形个数”。 关于三角形的定义,你一定不陌生。graphx是如何识别三角形,并做统计的呢 正如上图所示:每个顶点收集邻居点,如点1的邻居为(2,3,4),graphx中col

BookLing的博客 1万+

代码复现3—VLN-CE

运行训练完后在 data文件下会自动生成一个“checkpoints”文件,文件下包含任务文件“seq2seq”,该文件下会包括训练出来的权重和评估结果。数据集下载完后路径提取:data/scene_datasets/mp3d/{scene}/{scene}.glb。注意这里下载的数据集并不是所有的matterport3d,只需要一部分,包含90个场景,大小压缩后约16G。在“eval”时,会在data文件下生成videos文件,里面存放的是可视化的轨迹视频。

qq_44100524的博客 3201

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

计蒜客 输出升级版三角形(格式化输出)

(一)输出升级版三角形 这次我们输出一个稍微复杂的三角形,输入一个大写字母(A-Z)或者一个数字(1-9)。 比如输入是F的时候,输出: A ABA ABCBA ABCDCBA ABCDEDCBAABCDEFEDCBA输入是3的时候,输出: 1 121 12321 输入格式 输入一个数字(1-9)或者一个大写字母(A-Z)。 输出格式 按照题

Month的博客 964

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【计蒜客】基础算法入门之深度搜索

很想写一个很好的文章引子,但是囿于语文水平有限,写不出什么好东西来,干脆就随便写点东西吧。之前写的文章都是关于爬虫的,爬虫虽好,但是写来写去就是那些东西,是时候学习点新东西了!现在自己很缺关于算法的知识,于是就上计蒜客学习了基础算法入门,但是苦于它教学用的是C++,而我大一学过C++,现在早就忘光了。于是我将写几篇系列文章,将计蒜客上面的C++算法改写成Python。 这是第二篇文章《深度搜索》

小样的博客 1300

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

26.2.2练习总结

因为是两个数相加,所以在输入x的时候只需要寻找之前有多少个与此数相加等于2^n的,也就是寻找前面数字为2^n-x的数量即可。如果 ai​+aj​ 可以表示成 2 的幂(例如 1,2,4,8,16,…我将i,j都遍历了,k则使用二分去找>=i+j的位置。需要满足选择的三个数字的下标i<j<k,且ai​,aj​,ak​能组成一个三角形。例如 60 的质因数有 2,3,5,因此对应的质因数乘积为 2×3×5=30。有一个 n×m 的方格矩阵,每个格子 (i,j) 内都有一个数字 ai,j​。

wangluoqi的博客 577

算法考点分析

1)请简单解释算法是什么? 算法是一个定义良好的计算过程,它将一些值作为输入并产生相应的输出值。简单来说,它是将输入转换为输出的一系列计算步骤。 2)解释什么是快速排序算法? 快速排序算法能够快速排序列表或查询。它基于分割交换排序的原则,这种类型的算法占用空间较小,它将待排序列表分为三个主要部分: 小于Pivot的元素 枢轴元素Pivot(选定的比较值) 大于Pivot的元素 3)解释算法的时间复...

yikshing的博客 253

leetcode题目总结

基础算法 前缀和 题目名称 题目简述 5144矩阵区域和-中 稍微变化了一下的二维前缀和。注意不要越界 1310. 子数组异或查询-中 异或前缀和 哈希 题目名称 题目简述 不同的循环子字符串-良 题目写的不清楚,我还以为要用KMP求循环结。实际上就是比较两端是不是相同。直接字符串哈希。记住13111 数据结构 树 题目名称 题目简述 祖...

汤瑞的博客 1966

最小步数模型与BFS工程实践:从算法原理到工业级路径规划

最小步数模型是解决无权图最短路径问题的基础范式,其核心在于将现实中的状态转移、资源调度与路径优化抽象为离散状态空间上的最优搜索问题。BFS凭借分层遍历特性,天然保证首次到达即为最小步数,成为该模型的理论基石。然而在真实场景中,状态爆炸、重复判重开销与动态障碍等挑战,迫使开发者必须超越教科书实现,引入状态压缩、双哈希+布隆过滤、分层BFS等工程化技巧。本文聚焦算法原理与落地张力之间的关键断层,结合AGV调度、游戏NPC寻路、校园导航等典型应用,系统拆解状态定义、转移规则与终止条件的设计逻辑,揭示如何让BFS从

weixin_33991418的博客 439

ACM 全部算法总结

ACM 所有算法 数据结构 栈 队列 链表 哈希表 哈希数组 堆 优先队列 双端队列 可并堆 左偏堆 二叉查找树 Treap 伸展树 并查集 集合计数问题 二分图的识别 平衡二叉树 二叉排序树 线段树 一维线段树 二维线段树 树状数组 一维树状数组 N维树状数组 字典树 后缀数组 后缀树 块状链表 哈夫曼树 桶 跳跃表 Tr...

繁凡さん的博客 5336

蓝桥杯,,

【代码】蓝桥杯。

jgvshb的博客 435

ACM常用知识点(欢迎补充)

ACM 所有算法 数据结构     栈,队列,链表 哈希表,哈希数组 堆,优先队列 双端队列 可并堆 左偏堆 二叉查找树 Treap 伸展树 并查集 集合计数问题 二分图的识别 平衡二叉树 二叉排序树 线段树 一维线段树 二维线段树 树状数组 一维树状数组 N维树状数组 字典树 后缀数组,后缀树 块状链表 哈夫曼树 桶,跳跃表 Trie树(静态建树、动态建树) AC自动机 LCA和RMQ问题 K...

一只可怜的小菜鸡的博客 466

算法竞赛入门指南:从C++环境搭建到核心思维训练

算法是计算机科学的核心,它通过一系列指令解决特定问题,其效率直接影响程序的性能。理解算法的时间与空间复杂度是评估解决方案可行性的基础,这涉及到对数据结构(如数组、链表、树)和经典算法(如排序、搜索)的掌握。在工程实践中,高效算法能显著提升软件处理海量数据的能力,广泛应用于搜索引擎、推荐系统、路径规划等场景。对于希望快速上手算法实践的开发者而言,算法竞赛提供了一个绝佳的练兵场。本文聚焦于C++语言在竞赛中的高效应用,详细介绍了如何配置轻量级的VSCode与MinGW开发环境,并深入讲解了STL容器(如vect

weixin_30274627的博客 404

ACM算法列表,记下来随时查用

数据结构 栈,队列,链表 哈希表,哈希数组 堆,优先队列 双端队列 可并堆 左偏堆 二叉查找树 Treap 伸展树 并查集 集合计数问题 二分图的识别 平衡二叉树 二叉排序树 线段树 一维线段树 二维线段树 树状数组 一维树状数组 N维树状数组 字典树 后缀数组,后缀树 块状链表 哈夫曼树 桶,跳跃表 Trie树(静态建树、动态建树)

童凌的技术博客 1012

【算法】大厂机考总结和HOT100

【最新最全】华为OD历年机试题集合+OJ刷题网址+刷题经验_华为的外包都要提前刷题 数据库刷题的地址是哪个-优快云博客。

qq_58358642的博客 378

编程进阶(转载)

编程进阶(转载) ACM所有算法 数据结构 栈,队列,链表 哈希表,哈希数组 堆,优先队列双端队列可并堆左偏堆 二叉查找树(二叉搜索树、二叉排序树)伸展树 并查集集合计数问题二分图的识别 平衡二叉树 线段树一维线段树二维线段树 树状数组一维树状数组N维树状数组 字典树 后缀数组,后缀树 块状链表 哈夫曼树 桶,跳跃表...

weixin_30614109的博客 384

大部分常见算法总结,算法清单

ACM 所有算法 数据结构 栈,队列,链表 哈希表,哈希数组 堆,优先队列 双端队列 可并堆 左偏堆 二叉查找树 Treap 伸展树 并查集 集合计数问题 ...

abdke_123的博客 953

ACM算法合集

 找到了一个大牛总结的算法合集,看完之后又是一波头秃的操作,不过以后可以按照这个调整自己学习的方向啦。                                                                                                ACM 算法 数据结构 栈,队列,链表 哈希表,哈希数组 ...

weixin_42097814的博客 1589
上一篇: BC#47
下一篇: 计蒜客课程系列:蒜头学算术(DFS)
林下的码路
博客等级 码龄12年 295粉丝 506原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林下的码路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值