等边三角形
描述
小白手上有一些小木棍,它们长短不一,小白想用这些木棍拼出一个等边三角形,并且每根木棍都要用到。 例如,小白手上有长度为 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) r