http://acm.hdu.edu.cn/showproblem.php?pid=4277

  暴力dfs全部情况,然后用set去重。。。。

  刚开始的时候打算用状态压缩,先从所有枝条中找到其中两组枝条,枚举全部情况。不过这种方法搜索要15 * 9E7次,一个case就超时了。后来改成枚举3^15种状态的状态压缩,3^15是不超时的,不过统计的时候每种状态统计15次,这就完蛋了!刚开始的时候没有意识到这样的问题,而且状态压缩我也打的不多,所以没有什么时候该用什么时候不该的意识,所以一直TLE都没有找到原因。最后一次代码,在dfs的时候同时统计三条边,然后在用完所有边后用set来统计(或者hash)有多少个不同的三角形,最后输出就好了。

1000ms的代码,囧:

View Code

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <cstring>
 4 #include <vector>
 5 #include <set>
 6
 7 using namespace std;
 8
 9 typedef pair<int, int> pii;
10 typedef pair<pii, int> piii;
11 typedef vector<int> vi;
12
13 set<piii> tri;
14 vi len;
15
16 void dfs(int pos, int la, int lb, int lc, int sum){
17     if (pos >= len.size()){
18         if (la <= lb && lb <= lc && la + lb > lc) tri.insert(make_pair(make_pair(la, lb), lc));
19         return ;
20     }
21     if (la + len[pos] <= (sum / 3)) dfs(pos + 1, la + len[pos], lb, lc, sum);
22     if (lb + len[pos] <= (sum >> 1)) dfs(pos + 1, la, lb + len[pos], lc, sum);
23     dfs(pos + 1, la, lb, lc + len[pos], sum);
24 }
25
26 int main(){
27     int T, n, a, sum;
28
29 #ifndef ONLINE_JUDGE
30     freopen("in", "r", stdin);
31 #endif
32     scanf("%d", &T);
33     while (T-- && ~scanf("%d", &n)){
34         tri.clear();
35         len.clear();
36         sum = 0;
37
38         while (n--){
39             scanf("%d", &a);
40             len.push_back(a);
41             sum += a;
42         }
43         dfs(0, 0, 0, 0, sum);
44
45         printf("%d\n", tri.size());
46     }
47
48     return 0;
49 }

  搜索的题做太少了,之后一定要好好加强才行!

——written by Lyon

转载于:https://www.cnblogs.com/LyonLys/archive/2012/09/10/hdu_4277_Lyon.html

hdu 4277 USACO ORZ相关推荐

  1. 很有趣的STL初学资料

    1.泛型程序设计简介与迭代器的介绍 2.常见的STL容器及其例题应用(UVA10474,UVA101,UVA10815,UVA156,UVA540,UVA136 HDU1027,CF501B,HDU1 ...

  2. java中imp结尾,imp java

    适配器模式之桥梁模式 设计模式目录 http://blog.csdn.net/fenglailea/article/details/52733435 风.fox 桥梁模式 Bridge Pattern ...

  3. HDU-4277USACO ORZ深搜+set去重

    USACO ORZ(DFS+set去重) 链接 2.题目描述 Like everyone, cows enjoy variety. Their current fancy is new shapes ...

  4. 2014 ACM/ICPC 鞍山赛区网络赛(清华命题)

    为迎接10月17号清华命题的鞍山现场赛 杭电上的题目 Biconnected(hdu4997)     状态压缩DP Rotate(hdu4998)    相对任一点的旋转 Overt(hdu4999 ...

  5. hdu4277 暴力

    hdu4277   暴力 USACO ORZ Time Limit : 5000/1500ms (Java/Other)   Memory Limit : 32768/32768K (Java/Oth ...

  6. ACM练级日志:set

    STL这个东西有时候会出乎意料的好用,第7篇那个让我写了200行的Treap用set这个玩意可以省掉很多代码--所以之后又用set重新写了一遍,正好以前也没用过set,记录一下,万一下次还有呢. se ...

  7. hdu 2665(主席树查询区间k大值)

    先贴我自己写的代码做模板虽然跟原博主没什么两样.(一开始空间开的4*maxn,交到hdu上一直TLE很奇怪) #include<bits/stdc++.h> using namespace ...

  8. xdoj(1187~1195 )Orz熊猫杯。

    这个月好多事啊马上四级,ccf,选修的大作业,两次数据结构上机报告,物理实验考试,以及这个月过去的马上就到了期末考试了.usaco暂时有空就刷没空就不刷了. 上个星期日学校Oj上搞了一个比赛Orz熊猫 ...

  9. hdu 1306(字符串匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1306 思路:一开始还以为是求最长公共序列呢...仔细一看,orz.....就是求两个串匹配时公共部分字 ...

最新文章

  1. npm安装出错Unexpected end of input at 1:2307
  2. java接口常用_java的常用接口
  3. python数据拟合固定参数_如何将数据拟合到非理想二极管方程(隐式非线性函数)并检索参数 - python...
  4. 漫步最优化三十——非精确线搜索
  5. 最全的“大数据”学习资源
  6. [51单片机] SPI nRF24L01无线 [可以放在2个单片机里实现通信]
  7. Javascript第二章中switch结构及与if的区别第二课
  8. mac 看端口占用并杀死进程
  9. JavaScript字符转Unicode,顺便说句:GitHub的Oh no页面很亮
  10. 查看mysql服务器位置,查看mysql服务器ip地址
  11. 你要的Chrome插件都在这里了
  12. python echarts教程_ECharts 入门教程
  13. 阿里云Dataworks
  14. 超简单 Python 汉字拼音转换工具
  15. ffmpeg实例,fade淡入淡出效果
  16. 计算圆周率可以根据公式如下:请利用Python提供的itertools模块,我们来计算这个序列的前N项和——python
  17. C++ 虚函数表 vfptr
  18. Maven基础——什么是Maven
  19. smallworld 下的magik module 的logger和service provider
  20. win7系统没有诊断策略服务器,Win7提示诊断策略服务未运行无法诊断检查网络解决方法...

热门文章

  1. 牛客练习赛36 Rabbit的字符串(最小表示法)
  2. HDU Problem - 5101 Select(二分)
  3. 如何检测ARP病毒,arp病毒怎么解决?
  4. 最受Linux程序员欢迎的7个代码编辑器的介绍及下载地址
  5. C++ list::splice()用法
  6. [BUUCTF-pwn]——picoctf_2018_buffer overflow 1
  7. Lua——基本语法知识,从hello word开始
  8. Struts2 action的单例与多例
  9. svn switch 导致个别文件switch失败
  10. maven 中 部署构件至Nexus(mvn deploy)