hdu4277 DFS+SET

题意:
      给你一些木棍,问你可以组成多少个三角形..


思路:

     直接深搜,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;
}





原文地址:https://www.cnblogs.com/csnd/p/12063227.html