HDU 4277 USACO ORZ 2012 ACM/ICPC Asia Regional Changchun Online 1011

HDU 4277 USACO ORZ 2012 ACM/ICPC Asia Regional Changchun Online 1011

就是给N(N<=15)个线段,用这N个线段组成一个三角形,问能组成多少种三角形。

水题,爆搜即可,时间复杂度3^15。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include < set>

using  namespace std;

int ncase;
int n;
int arr[20];
set< long  long>col;

void dfs( int a,  int b,  int c,  int cur)
{
     if (cur==n)
    {
         if (a>b||b>c||a>c)  return;
         if (a&&b&&c&&a+b>c)
        {
             long  long t = 1000000000000LL*a+1000000LL*b+c;
            col.insert(t);
        }
         return;
    }
    dfs(a+arr[cur],b,c,cur+1);
    dfs(a,b+arr[cur],c,cur+1);
    dfs(a,b,c+arr[cur],cur+1);
}

int main()
{
     while (EOF!=scanf("%d", &ncase))
    {
         while (ncase--)
        {
            col.clear();
            scanf("%d", &n);
             for (  int i = 0 ; i < n ; i++ )
                scanf("%d", arr+i);
            dfs(0,0,0,0);
            printf("%d\n", col.size());
        }
    }
     return 0;
}

你可能感兴趣的:(HDU 4277 USACO ORZ 2012 ACM/ICPC Asia Regional Changchun Online 1011)