首页 > 代码库 > 【HDU-4277】USACO ORZ(暴搜)
【HDU-4277】USACO ORZ(暴搜)
直接dfs暴力,不需要减枝,利用set进行判断重复,hash一下,转化成一个longlong的数保存就好了。
#include<cstdio> #include<set> #include<cstring> #include<algorithm> using namespace std; #define MAXD 20 + 5 typedef long long LL; int n; LL array[MAXD]; set<LL>vis; LL ans; void dfs(LL a,LL b,LL c,int cur){ if(cur == n){ if(a >= b && b >= c){ if(a + b > c && a + c > b && b + c > a && a && b && c){ LL t = c * 100000001 + b * 10001 + a; if(!vis.count(t)){ ans ++ ; vis.insert(t); } } } return ; } dfs(a + array[cur],b,c,cur + 1); dfs(a,b + array[cur],c,cur + 1); dfs(a,b,c + array[cur],cur + 1); return ; } int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d",&n); vis.clear(); for(int i = 0 ; i < n ; i++) scanf("%I64d",&array[i]); ans = 0; dfs(0,0,0,0); printf("%I64d\n",ans); } return 0; }
【HDU-4277】USACO ORZ(暴搜)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。