hdu4277USACO ORZ dfs暴力枚举+map
2015-07-27 13:27
309 查看
//给N个 问rails用着N个rails能构成几个不同的三角形 //dfs暴力枚举+(map) #include<cstdio> #include<cstring> #include<map> #include<iostream> using namespace std ; int ans ; int a[20] ; int n ; int sum = 0 ; struct node { int a , b , c ; bool operator == (const node d)const {return (d.a==a&&d.b==b&&d.c==c);} }; bool operator < (const node d , const node e){ if(d.a == e.a) { if(d.b == e.b) return d.c < e.c ; return d.b < e.b ; } return d.a < e.a;} bool operator == (const node d , const node e){return (d.a==e.a&&d.b==e.b&&d.c==e.c);} map<node , int> ma ; void dfs(int sum_1 , int sum_2 , int sum_3 ,int pos) { if(sum_1 > sum/2 || sum_2 > sum/2 || sum_3 > sum/2) return ; if(pos == n + 1) { if(sum_1 <= sum_2 && sum_2 <= sum_3) if(sum_2 + sum_3 > sum_1 && sum_3) { struct node a = {sum_1 , sum_2 , sum_3} ; if(ma[a] == 0) { ans++ ; ma[a] = 1; } } return ; } dfs(sum_1+a[pos] , sum_2 , sum_3 , pos+1) ; dfs(sum_1 , sum_2 + a[pos] , sum_3 , pos+ 1) ; dfs(sum_1 , sum_2 , sum_3+ a[pos] , pos+1) ; } int main() { //freopen("in.txt" ,"r" , stdin) ; int T ; scanf("%d" ,&T) ; while(T--) { sum = 0 ; scanf("%d" ,&n) ; for(int i = 1;i <= n;i++) scanf("%d" ,&a[i]) ,sum += a[i] ; ans = 0 ;ma.clear() ; dfs(0 , 0 , 0 ,1) ; printf("%d\n" ,ans) ; } }
相关文章推荐
- HTTP Header 详解
- java纯数字加密解密实例
- iOS searchable 去背景色
- window7 64位 python2.7 安装libsvm和liblinear
- HDU - 2161 - Primes (质数)
- 网站项目系列 第一篇
- Repair U Disk logo unvisiable in task bar on windows XP
- [OpenXml] Generate excel in memory and dump to file
- struct内存对齐
- 树上删边游戏(树上博弈)
- CallableStatement用法
- Lakes.AERMOD.View.v8.9.0 1CD大气扩散模型软件包
- poj 2096 概率dp
- Tomcat 简介
- eclipse查看方法说明时出现This element neither has attached source nor attached Javadoc and hence no Javadoc
- CSS清除浮动常用方法
- Binary Tree Inorder Traversal
- 14、Linux例行性工作排程
- 接入机房产生冷凝水
- Fisher线性判别函数+c代码