【C++】三角形(triangle)

题目描述

小魏有 3*n 根颜色两两不同的木棍,第i根的长度为a[i]。

小魏想把这3*n根木棍分成n组,每组三根,并且同一组的三根木棍可以组成一个三角形。

小魏想知道他有多少种不同的分组方案。认为两个分组方案是不同的,当且仅当两种方案组出来的三角形是不同的。

输入

第一行一个整数n。

第二行n个整数a[i]。

输出

一行一个整数,表示方案数。

cpp 复制代码
#include <cstdio>
#include <algorithm>
using namespace std;
int n, a[30], b[30];
int mx;
void dfs(int x)
{
	if (b[x])
	{
		dfs(x + 1);
		return;
	}
	if (x == n + 1) 
	{
		mx++;
		return;
	}
	for (int i = x + 1; i <= n; i++)
	{
		if (b[i] == 0) 
		{
			for (int j = i + 1; j <= n; j++)
			{
				if (b[j] == 0) 
				{
					if (a[x] + a[i] > a[j]) 
					{
						b[x] = b[i] = b[j] = 1;
						dfs(x + 1);
						b[x] = b[i] = b[j] = 0;
					}
				}
			}
		}
	}
}
int main() 
{
	scanf("%d", &n);
	n *= 3;
	for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
	sort(a + 1, a + n + 1);
	dfs(1);
	printf("%d", mx);
	return 0;
}
相关推荐
无敌最俊朗@14 小时前
C++线程中detach和join的注意点
c++
努力努力再努力wz14 小时前
【Linux进阶系列】:线程(下)
linux·运维·服务器·c语言·数据结构·c++·算法
qq_4017004114 小时前
Qt键盘组合
开发语言·qt
lkbhua莱克瓦2414 小时前
Java入门——Java跨平台的原理
java·开发语言·笔记·github
song1502653729814 小时前
PLC控制编程,触摸屏程序开发设计解析
开发语言·javascript·ecmascript
abcd_zjq15 小时前
VS2026+QT6.9+ONNX+OPENCV+YOLO11(目标检测)(详细注释)(附测试模型和图像)
c++·人工智能·qt·目标检测·计算机视觉·visual studio
西幻凌云15 小时前
认识设计模式——单例模式
c++·单例模式·设计模式·线程安全·饿汉和懒汉
Charles_go15 小时前
C#7、如何处理异常
开发语言·c#
我曾遇到一束光15 小时前
Springboot3.X+security6.5+jdk21
java·开发语言
Tipriest_15 小时前
C++ 图形中间件库Magnum详细介绍
开发语言·c++·magnum