给你一些木棍,问你可以组成多少个三角形..
思路:
直接深搜,N很小深搜无压力,也可以直接算出来,但我不会算..
#include<stdio.h> #include<set> using namespace std; __int64 num[20]; int n; set<__int64>st; void dfs(__int64 a ,__int64 b ,__int64 c ,int ii) { if(ii == n + 1) { if(a > b || a > c || b > c) return ; if(a && b && c && a + b > c) { __int64 now = a * 225000000000 + b * 150000 + c; st.insert(now); } return ; } dfs(a + num[ii] ,b ,c ,ii + 1); dfs(a ,b + num[ii] ,c ,ii + 1); dfs(a ,b ,c + num[ii] ,ii + 1); return ; } int main () { int t ,i; scanf("%d" ,&t); while(t--) { scanf("%d" ,&n); for(i = 1 ;i <= n ;i ++) scanf("%I64d" ,&num[i]); st.clear(); dfs(0, 0 ,0 ,1); printf("%d " ,st.size()); } return 0; }