判断一组数能否组成等边三角形
输入:n个数
输出:yes/no
假设三条边分为为a,b,c。要做n次选择,每个数可以有三种选择,可以放在a上,b上,或者c上。需要设置3个参数记录这些状态。
dfs(index,x,y,z):做了index次选择,且当前边a,b,c的长度为x,y,z
if(index==n) return false;
//已经做了n次选择
if(x>sum/3||y>sum/3||z>sum/3)return false;
//有一条边大于sum/3
if(index==n&&x==y&&y==z&&z==sum/3)return true;
//已经做了n次选择当前是等边三角形
return dfs(index+1,x+n[index],y,z)||
dfs(index+1,x,y+n[index],z)||dfs(index+1,x,y,z+n[index]);