标签:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include <cctype> 6 #include <cstdlib> 7 #include<cmath> 8 #include <string> 9 #include <map> 10 #include <set> 11 #include <queue> 12 #include <vector> 13 #include <stack> 14 #include <cctype> 15 using namespace std; 16 typedef unsigned long long ull; 17 #define INF 0xfffffff 18 19 int l[16],n,e[3]; 20 set<int> s; 21 22 //a,b,c是边,k是已经用的边数 23 void dfs(int a,int b,int c,int k) 24 { 25 if(n==k) 26 { 27 if((a<=b)&&(b<=c)&&(b+a>c)) 28 { 29 s.insert(a*12345+b*1234+c); //这里为了保证一种形状的唯一性,必须要乘以足够大的数,当b*123时就WA。 30 } 31 32 return; 33 } 34 dfs(a+l[k],b,c,k+1); 35 dfs(a,b+l[k],c,k+1); 36 dfs(a,b,c+l[k],k+1); 37 return; 38 } 39 40 int main() 41 { 42 int k,m,q,p; 43 int T; 44 cin>>T; 45 while(T--) 46 { 47 s.clear(); 48 memset(l,0,sizeof(l)); 49 cin>>n; 50 for(int i=0;i<n;++i) 51 { 52 cin>>l[i]; 53 } 54 55 dfs(0,0,0,0); //一定要从0开始,不能dfs(l[0],l[1],l[2],3),这样就没有这三条边组合在一条边上的情况。 56 57 cout<<s.size()<<endl; 58 59 } 60 return 0; 61 }
标签:
原文地址:http://www.cnblogs.com/Traveller-Leon/p/4869447.html