hdu 4277 USACO ORZ (Dfs)
题意:
给你n个数,要你用光所有数字组成一个三角形,问能组成多少种不同的三角形
时间分析:
3^15左右
#include<stdio.h> #include<set> using namespace std; set<long long>s; int _case,n,sum; int ai[20]; int Dfs(int a,int b,int c,int m) { if(m==n) { if(a>b||b>c) return 0; if(a&&b&&c&&a+b>c) { s.insert(a*sum*sum+b*sum+c); } return 0; } Dfs(a+ai[m],b,c,m+1); Dfs(a,b+ai[m],c,m+1); Dfs(a,b,c+ai[m],m+1); } int main() { scanf("%d",&_case); while(_case--) { sum=0; s.clear(); scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&ai[i]); sum+=ai[i]; } Dfs(0,0,0,0); printf("%d\n",s.size()); } return 0; }