ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

【C++】三角形(triangle)

2026/8/7 18:25:09 拓冰建站 浏览量
【C++】三角形(triangle)
题目描述

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

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

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

输入

第一行一个整数n。

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

输出

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

#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;
}