等边三角形
描述
小白手上有一些小木棍,它们长短不一,小白想用这些木棍拼出一个等边三角形,并且每根木棍都要用到。 例如,小白手上有长度为 1,2,3,3 的4根木棍,他可以让长度为1,2 的木棍组成一条边,另外 2 跟分别组成 2 条边,拼成一个边长为 3 的等边三角形。小白希望你提前告诉他能不能拼出来,免得白费功夫。
输入
首先输入一个整数 n(3 ≤ n ≤ 200),表示木棍数量,接下来输入 n 根木棍的长度 p_i(1 ≤ p_i ≤ 10000)。
输出
如果小白能拼出等边三角形,输出"yes",否则输出"no"。
输入样例 1
5
1 2 3 4 5
输出样例 1
yes
输入样例 2
4
1 1 1 1
输出样例 2
no
从前往后选数,每次分配给A或B或C…
优化:如果集合A、B集合各自之和均等于all的1/3,那么集合C之和也一定等于
all的1/3.因此,dfs分配时只考虑A和B即可。
代码:
#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<string>
using namespace std;
int arr[21];
int n,sum,flag;
void dfs(int cur,int a,int b,int c)
{
if(flag==1) return ;
if(cur>n) return ;
if(a>sum/3||b>sum/3||c>sum/3) return ;
if(a==b&&b==c&&a==sum/3) flag++;
dfs(cur+1,a+arr[cur],b,c);
dfs(cur+1,a,b+arr[cur],c);
dfs(cur+1,a,b,c

这篇博客探讨了如何使用不同长度的木棍拼出等边三角形的问题。内容涉及输入木棍的数量和长度,以及判断是否能拼成等边三角形的逻辑。通过示例输入和输出,解释了当木棍总和的三分之一相等时可以形成等边三角形的条件,并提及了优化的解决方案。
最低0.47元/天 解锁文章
3336

被折叠的 条评论
为什么被折叠?



