蒜头君手上有一些小木棍,它们长短不一,蒜头君想用这些木棍拼出一个等边三角形,并且每根木棍都要用到。例如, 蒜头君手上有长度为1, 2, 3, 3的4根木棍,他可以让长度为1,2的木棍组成一条边,另外2跟分别组成2条边,拼成一个边长为3的等边三角形。蒜头君希望你提前告诉他能不能拼出来,免得白费功夫。
输入格式
首先输入一个整数n(3 < n < 10),表示木棍数量,接下来输入n根木棍的长度pi(1 <Pi < 10000)。
输出格式
如果蒜头君能拼出等边三角形,输出"yes",否则输出"no"。
#include<iostream>
using namespace std;
int n;
int a[15];
bool vis[15];
bool f;
int sum = 0;
void dfs(int cnt, int s)
{
if (cnt == 3)
{
f = true;
return;
}
if (s == sum / 3)
{
dfs(cnt + 1, 0);
return;
}
for (int i = 0; i < n; i++)
{
if (!vis[i])
{
vis[i] = true;
dfs(cnt + 1, s + a[i]);
vis[i] = false;
}
}
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
sum += a[i];
}
dfs(0, 0);
if (sum % 3 != 0)
{
cout << "no";
}
else
{
dfs(0, 0);
if (f)
{
cout << "yes";
}
}
return 0;
}