hdu 4277
#include <cstdio> //by-ACMer_xiaohao #include <cstring> #include <map> using namespace std; #define N 50005 //不知道数组为什么开这么大 map<int,bool> mp[N]; int sum,n,ma[20],ans; void dfs(int a,int b,int y) { int c=sum-a-b; if(a>sum/3||a>c||b>c) return; //判重 把a看做最小的边 if(y==n) { if(a>b) swap(a,b); if(a+b>c) { if(mp[a].find(b)==mp[a].end()) //找不到返回mp[a].end() { ans++; mp[a][b]=true; } } return; } dfs(a+ma[y+1],b,y+1); dfs(a,b+ma[y+1],y+1); dfs(a,b,y+1); } int main() { int cas,i,j; scanf("%d",&cas); while(cas--) { for(i=0;i<N;i++) { mp[i].clear(); } sum=0;ans=0; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&ma[i]); sum+=ma[i]; } dfs(0,0,0); printf("%d\n",ans); } return 0; }
补充:软件开发 , C++ ,