hdu 4277 2012长春赛区网络赛 dfs+hashmap ***
hashmap判重大法好
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
using namespace std;
#define MOD 1000000007
const int INF=0x3f3f3f3f;
const double eps=1e-;
typedef long long ll;
#define cl(a) memset(a,0,sizeof(a))
#define ts printf("*****\n");
const int MAXN=;
int n,m,tt;
int sum=,a[MAXN];
const int HASH = ;
struct HASHMAP
{
int head[HASH],next[HASH],size;
int state[HASH][];
int hash(int a,int b,int c)
{
return (((a*+b)*+c)*)%HASH; //131
}
void init()
{
size = ;
memset(head,-,sizeof(head));
}
int insert(int a,int b,int c)
{
int h = hash(a,b,c);
for(int i = head[h]; i != -;i = next[i])
if(a == state[i][]&&b == state[i][]&&c == state[i][])
{
return ;
}
state[size][]=a,state[size][]=b,state[size][]=c;
next[size] = head[h];
head[h] = size++;
return ;
}
} H1;
bool check(int a1,int a2,int a3)
{
if(a1+a2>a3&&a1+a3>a2&&a2+a3>a1) return ;
else return ;
}
void dfs(int a1,int a2,int a3,int pos)
{
if(a3>sum/) return;
if(pos>=n)
{
if(a1==||a2==||a3==) return;
if(check(a1,a2,a3)&&a1>=a2&&a2>=a3)
{
H1.insert(a1,a2,a3);
}
return;
}
dfs(a1+a[pos],a2,a3,pos+);
dfs(a1,a2+a[pos],a3,pos+);
dfs(a1,a2,a3+a[pos],pos+);
} int main()
{
int i,j,k,ca=;
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
#endif
scanf("%d",&tt);
while(tt--)
{
H1.init();
sum=;
scanf("%d",&n);
for(i=;i<n;i++) scanf("%d",a+i),sum+=a[i];
dfs(,,,);
printf("%d\n",H1.size);
}
}
hdu 4277 2012长春赛区网络赛 dfs+hashmap ***的更多相关文章
- hdu 4272 2012长春赛区网络赛 dfs暴力 ***
		
总是T,以为要剪枝,后来发现加个map就行了 #include<cstdio> #include<iostream> #include<algorithm> #in ...
 - hdu 4273 2012长春赛区网络赛 三维凸包中心到最近面距离 ***
		
新模板 /* HDU 4273 Rescue 给一个三维凸包,求重心到表面的最短距离 模板题:三维凸包+多边形重心+点面距离 */ #include<stdio.h> #include&l ...
 - hdu 4274 2012长春赛区网络赛 树形dp ***
		
设定每个节点的上限和下限,之后向上更新,判断是否出现矛盾 #include<cstdio> #include<iostream> #include<algorithm&g ...
 - hdu 4741 2013杭州赛区网络赛 dfs ***
		
起点忘记录了,一直wa 代码写的很整齐,看着很爽 #include<cstdio> #include<iostream> #include<algorithm> # ...
 - hdu 4412 2012杭州赛区网络赛 期望
		
虽然dp方程很好写,就是这个期望不知道怎么求,昨晚的BC也是 题目问题抽象之后为:在一个x坐标轴上有N个点,每个点上有一个概率值,可以修M个工作站, 求怎样安排这M个工作站的位置,使得这N个点都走到工 ...
 - hdu 4411 2012杭州赛区网络赛 最小费用最大流 ***
		
题意: 有 n+1 个城市编号 0..n,有 m 条无向边,在 0 城市有个警察总部,最多可以派出 k 个逮捕队伍,在1..n 每个城市有一个犯罪团伙, 每个逮捕队伍在每个城市可以选 ...
 - hdu 4293 2012成都赛区网络赛 dp ****
		
题意:有n个人,可任意分成若干组,然后每个人个各提供一个信息,表示他们组前面有多少人,后面有多少人.问最多有多少个信息是不冲突的. 将n个人看成一组区间,然后每个人的信息可以表示为该人所在组的区间,然 ...
 - hdu 4291 2012成都赛区网络赛 矩阵快速幂 ***
		
分析:假设g(g(g(n)))=g(x),x可能非常大,但是由于mod 10^9+7,所以可以求出x的循环节 求出x的循环节后,假设g(g(g(n)))=g(x)=g(g(y)),即x=g(y),y也 ...
 - hdu 4278 2012天津赛区网络赛 数学 *
		
8进制转为10进制 #include<cstdio> #include<iostream> #include<algorithm> #include<cstr ...
 
随机推荐
- wav转aac
			
//调用neroAacEnc.exe STARTUPINFO si={}; PROCESS_INFORMATION pi={};//隐藏窗口 si.cb=sizeof(si); si.dwFlags= ...
 - 新建samba配置步骤
			
Linux系统默认已经安装了Samba,但是没有安装Samba服务: 1,先查看安装情况:rpm -qa|grep samba 根据系统的安装情况选择下载或者通过光驱安装所缺的rpm包. 我的安装情况 ...
 - Python中用format函数格式化字符串的用法
			
这篇文章主要介绍了Python中用format函数格式化字符串的用法,格式化字符串是Python学习当中的基础知识,本文主要针对Python2.7.x版本,需要的朋友可以参考下 自python2. ...
 - 79  两个整数集合A和B,求其交集
			
[本文链接] http://www.cnblogs.com/hellogiser/p/ab-intersect.html [题目] 两个整数集合A和B,求其交集. [分析] 1. 读取整数集合A中 ...
 - find参数exec、管道符|、xargs的区别
			
1.这三个命令都可以将前面的输出做为后面的输入. 2.他们对于前面的输出,处理方式不同. find . -name "*.sh" -exec cat {} \; find . -n ...
 - SQL Server 2008登录错误:无法连接到(local)的解决方法
			
1.服务器类型我们选择了“数据库引擎”时,查找里面的可登录用户名是没有的,下边的服务器名称只显示为“(local)”,连“Windows 身份验证”都无法登录. 如果朋友们和我出错的问题是一样请看下面 ...
 - [Android Studio导入第三方类库方法] Error:(19, 23) 错误: 程序包org.apache.http不存在
			
本文主要参考以下链接: http://m.blog.csdn.net/blog/BoxRice/48575027 https://drakeet.me/android-studio http://ww ...
 - Greedy:Graveyard Design(POJ 2100)
			
墓地 题目大意,给定一个整数,要你找出他的平方和组合 太简单了....不过一开始我储存平方和想降低时间,后来发现会超内存,直接用时间换空间了,游标卡尺法 #include <iostream&g ...
 - 初次使用 VUX
			
1. 因为以前没用过vux ,所以还是比较不熟练: 2.项目部署是根据git上的源码改的: 开始:将git上的项目下载或者clone到本地: 001:安装nodejs--> 002:npm in ...
 - POJ 1222 EXTENDED LIGHTS OUT (高斯消元)
			
题目链接 题意:5*6矩阵中有30个灯,操作一个灯,周围的上下左右四个灯会发生相应变化 即由灭变亮,由亮变灭,如何操作使灯全灭? 题解:这个问题是很经典的高斯消元问题.同一个按钮最多只能被按一次,因为 ...