hdu 4277 USACO ORZ (dfs暴搜+hash)
题目大意:有N个木棒,相互组合拼接,能组成多少种不同的三角形。
思路:假设c>=b>=a 然后枚举C,在C的dfs里嵌套枚举B的DFS。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define mod 2000007
using namespace std; int n;
int X[20];
bool vis[20];
int ans;
long long sum; long long hash[mod]; bool ok(int b,int c)
{
int a=sum-b-c;
if(a+b>c && c>=b && b>=a)return true; return false;
} bool work(long long t)
{
int v=t%mod; while(hash[v]!=t && hash[v]!=-1)//.....之前这里写成了IF 卡了半天再找到。以后要细心。。。
v=(v+10)%mod; if(hash[v]==-1)
{
hash[v]=t;
return true;
}
return false;
} void dfsb(int pos,int c,int b)
{
//printf("c = %d b = %d\n",c,b);
for(int i=pos;i<=n;i++)
{
if(vis[i])continue; vis[i]=true;
b+=X[i]; if(ok(b,c))
{
//printf("c = %d,b = %d,a = %d\n",c,b,sum-b-c);
int a=sum-b-c;
long long t=(long long)a+(long long)b*sum+(long long)c*sum*sum;
if(work(t))ans++;
}
if(b<=c)dfsb(i,c,b); b-=X[i];
vis[i]=false;
}
} void dfsc(int pos,int c)
{
for(int i=pos;i<=n;i++)
{
if(vis[i])continue; vis[i]=true;
c+=X[i]; if(c>=sum/3 && c<=sum/2)dfsb(1,c,0);//剪枝 dfsc(i,c); c-=X[i];
vis[i]=false;
}
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n); memset(vis,0,sizeof(vis));
memset(hash,-1,sizeof(hash)); sum=0; for(int i=1;i<=n;i++)
{
scanf("%d",&X[i]);
sum+=X[i];
}
ans=0;
dfsc(1,0);
printf("%d\n",ans);
}
return 0;
}
hdu 4277 USACO ORZ (dfs暴搜+hash)的更多相关文章
- hdu 4277 USACO ORZ dfs+hash
USACO ORZ Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Proble ...
- hdu 4277 USACO ORZ DFS
USACO ORZ Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU 4277 USACO ORZ(DFS暴搜+set去重)
原题代号:HDU 4277 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4277 原题描述: USACO ORZ Time Limit: 5000/1 ...
- HDU 4277 USACO ORZ(暴力+双向枚举)
USACO ORZ Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu 4277 USACO ORZ(dfs+剪枝)
Problem Description Like everyone, cows enjoy variety. Their current fancy is new shapes for pasture ...
- hdu 4277 USACO ORZ (Dfs)
题意: 给你n个数,要你用光所有数字组成一个三角形,问能组成多少种不同的三角形 时间分析: 3^15左右 #include<stdio.h> #include<set> usi ...
- hdu 4277 USACO ORZ
没什么好方法,只能用dfs了. 代码如下: #include<iostream> #include<cstring> #include<cstdio> #inclu ...
- HDU 4284 Travel (Folyd预处理+dfs暴搜)
题意:给你一些N个点,M条边,走每条边要花费金钱,然后给出其中必须访问的点,在这些点可以打工,但是需要先拿到证书,只可以打一次,也可以选择不打工之直接经过它.一个人从1号点出发,给出初始金钱,问你能不 ...
- Usaco 2.3 Zero Sums(回溯DFS)--暴搜
Zero SumConsider the sequence of digits from 1 through N (where N=9) in increasing order: 1 2 3 ... ...
随机推荐
- IOS中UIDatePicker
UIDatePicker 1.常见属性 /* 样式 UIDatePickerModeTime,时间 UIDatePickerModeDate,日期 UIDatePickerModeDateAndTim ...
- 有空就写个C++程序
近期工作变得轻松了非常多,有了一些空暇的时间,准备把大学时候的C++抓起来,而且研究研究算法: 第一个C++程序:计算圆的面积,也是看其它的博客写出来的C++程序. #include<iostr ...
- Web API-属性路由
路由(Routing)就是Web API如何将一个URI匹配到一个action的过程.Web API 2 支持一个新的路由方式-属性路由(attribute routing).顾名思义,属性路由使用标 ...
- 手机web下拉加载
//需要 zepto.js支持 var page=0;//当前页 var pages=1;//总页数 var ajax=!1;//是否加载中 Zepto(function($){ $(window). ...
- 探索Android该Parcel机制上
一.先从Serialize说起 我们都知道JAVA中的Serialize机制.译成串行化.序列化……,其作用是能将数据对象存入字节流其中,在须要时又一次生成对象.主要应用是利用外部存储设备保存对象状态 ...
- Scala从零开始:使用Intellij IDEA写hello world
Scala从零开始:使用Intellij IDEA写hello world 分类: Scala |2014-05-23 00:39 |860人阅读 引言 在之前的文章中,我们介绍了如何使用Scal ...
- sql datalength与len区别用法
原文:sql datalength与len区别用法 len ( string_expression )参数:要计算的字符串 len() 函数len 函数返回文本字段中值的长度. sql len() 语 ...
- 开源文档管理系统LogicalDOC测试报告---安装篇
开源文档管理系统LogicalDOC测试报告---安装篇 分类: Linux2011-06-22 15:40 7436人阅读 评论(3) 收藏 举报 文档管理测试mysql数据库installerja ...
- Delphi的注册表操作
转帖:Delphi的注册表操作 2009-12-21 11:12:52 分类: Delphi的注册表操作 32位Delphi程序中可利用TRegistry对象来存取注册表文件中的信息. 一.创 ...
- rapid-framework脚手架快速搭建springMVC框架项目
rapid-framework介绍: 一个类似ruby on rails的java web快速开发脚手架,本着不重复发明轮子的原则,框架只是将零散的struts(struts2)+spring+h ...