• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
LyonLys
愿意在角落唱沙哑的歌 再大声也都是给你 请用心听 不要说话 Contact me via E-mail: lyon.lys@gmail.com
博客园    首页    新随笔    联系   管理    订阅  订阅
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 35 下一页
2013年5月25日
hdu 1677 Nested Dolls (Greedy + Treap)
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1677 题意是,给出一些矩形的长和宽,如果l1<l2且w1<w2,那么矩形2可以套在矩形1外面。问最优的套法下,最后可以剩下多少个矩形。 我想到的一个做法是,利用Treap来对当前最外层矩形是哪些进行维护。首先我们先按照宽(第二关键字)递增排序,如果相同就按长(第一关键字)递增排序。然后在构建出一棵空的Treap,按顺序插入到树中去。对于每一次插入,找到最大的可以被当前矩形覆盖的一个矩形,然后更新成新的矩形。如果找不到这样的矩形,就直接插入当前矩形。最后Treap的大小就是所需的答案。代码如下: 阅读全文
posted @ 2013-05-25 19:29 LyonLys 阅读(345) 评论(1) 推荐(0)
hdu 1224 Free DIY Tour (DAG 最长路)
摘要: Problem - 1224 水题一枚。 题目的意思是给出一个DAG,找出一条回路,路径的权值的和最大,输出最大值以及其路径。 构出DAG以后,spfa求最长路。代目如下: 1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 #include <vector> 5 #include <queue> 6 7 using namespace std; 8 9 typedef vector<int> VI;10 const int N = 111; 阅读全文
posted @ 2013-05-25 01:31 LyonLys 阅读(474) 评论(0) 推荐(0)
hdu 1069 Monkey and Banana (LIS)
摘要: Problem - 1069 随便找到的一道题目。 题意是给出一些的长方体,长方体可以用任意次数,可以任意翻转。如果一个长方体可以叠在另一个长方体上,条件是这个长方体的长和宽严格小于另一个长方体的长和宽。问给出的n种长方体最高可以叠到多高。 因为长方体有三种不同的面,而且长方体的长和宽要严格小于前一个,所以可以将一个长方体拆成三种不同的面作为底面的长方体,而且假设长总是大于宽的。将长方体按照长和宽排序,然后假设len[i]是放置第i个长方体的时候能得到的最大高度,之后的做法基本上跟LIS的操作一样了。 代码如下: 1 #include <cstdio> 2 #include < 阅读全文
posted @ 2013-05-25 00:11 LyonLys 阅读(195) 评论(0) 推荐(0)
2013年5月23日
uva 12553 Countdown (搜索+剪枝)
摘要: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3998 组队训练时候的一道题。题意是用给出的6个数利用加减乘除求出一个最接近给定数字的数,输出解决方案。 直接用状态压缩的方法,利用集合并,在两集合得出的数值之间加入运算符,存到新的集合之中去。如果不加入剪枝,总的状态数多达50W个,STL的常数大,所以会直接超时了。然后我们可以加上这样的一个剪枝,对于同一个状态,插入的数不应该重复,因为这样的一个数我们只需要一种获取方式就够了。于 阅读全文
posted @ 2013-05-23 16:23 LyonLys 阅读(237) 评论(0) 推荐(0)
hdu 3564 Another LIS (Splay Tree OR Segment Tree)
摘要: Problem - 3564 好不容易看见一道可以用Splay Tree写的题,结果应该是常数过大超时了。 好不容易还是给我找到bug了,就是一个字母打错,导致超时了。splay tree可以以421ms的时间完美通过。做法就是模拟插入数字,维护区间的最大LIS值即可。Splay版代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <iostream> 5 6 using namespace std; 7 8 const int inf = 阅读全文
posted @ 2013-05-23 02:57 LyonLys 阅读(214) 评论(0) 推荐(0)
2013年5月21日
hdu 4546 比赛难度 (PFS,优先级优先搜索)
摘要: Problem - 4546 题目是中文的,不解释了。 开始的时候不知道怎么可以搞出答案,就觉得这个是需要搜索的。于是就想到逐个数加上去,然后只取前m小的和,其余的弹出集合这种方法。为了可以动态维护这前m个最小的和,我用了multiset,又为了不会搜索到超出内存什么的,所以我在搜索的时候采取了剪枝,如果求和得到的数比现在集合中最大的数还要大,当前和跟之后的所有数的和都会大于集合中的最大数,这时就不用继续搜索下去了。(原始单个数的结合已进行排序)代码如下: 1 #include <cstdio> 2 #include <iostream> 3 #include < 阅读全文
posted @ 2013-05-21 19:46 LyonLys 阅读(484) 评论(0) 推荐(0)
2013年5月15日
三种素数筛法汇总
摘要: 本地测试结果是,第三种方法速度最快,而且可以直接判断给定的数是否素数。 1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 #include <cstring> 5 #include <cmath> 6 7 using namespace std; 8 9 const int N = 111111111;10 int prm[6666666], pn, np[N >> 6];11 bool mp[N];12 13 void getPrm1() 阅读全文
posted @ 2013-05-15 00:16 LyonLys 阅读(459) 评论(2) 推荐(0)
2013年5月14日
poj 2362 Square (dfs+剪枝)
摘要: 2362 -- Square 跟1011的Sticks差不多,不过这里是问给出的长度能否拼成一个正方形。这题数据比较小,不过对剪枝的要求还是差不多的。主要的剪枝是:1.由大到小排序后,在拼当前边的第一条棍子的时候必须选用当前没有用过的棍子中最长那条2.在搞同一条边的时候,下一条棍子不会比之前选了的大3.同一长度的棍子只搜一次然后就是代码: 1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 #include <cstring> 5 6 using namespace 阅读全文
posted @ 2013-05-14 02:19 LyonLys 阅读(219) 评论(0) 推荐(0)
2013年5月11日
LA 2797 Monster Trap (Simple Geometry && Floyd)
摘要: ACM-ICPC Live Archive 这题十分有意思。简单描述题意,有一个巫师想抓一只怪物,于是就画出n条线段来围住怪物。问题是,巫师画出来的图形是否围住了怪物。 这题的做法是构建一幅图,无向图中的点就是线段的两个端点和怪物所在的位置点,以及一个无穷远点。然后要做的就是判断点与点之间是否直线相连。最后的到点与点间的关系,用floyd直接得到点与点间的可达关系。 其中,要注意的是,线段的头尾于另一线段重合了的情况,以及两线段交于用一个点的情况。代码如下:View Code 1 #include <cstdio> 2 #include <cstring> 3 #inc 阅读全文
posted @ 2013-05-11 02:48 LyonLys 阅读(280) 评论(0) 推荐(0)
2013年5月8日
LA 4992 Jungle Outpost (二分+半平面交)
摘要: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2993 题意是,以顺时针方向给出一个多边形,可以任意的删除上面k个点,求最大的k,使得多边形内不存在任意点,无论删除哪k个点都依然保留在新多边形内。 二分加上半平面交。因为可以证明出,如果要删除k个点,最优的删除方法是删除连续的k个点,从而利用每隔d个点连出一条有向直线,判断新的半平面交是否为空。找到最小的,使半平面交为空的k,即为答案。1y~代码如下:View C 阅读全文
posted @ 2013-05-08 20:22 LyonLys 阅读(310) 评论(0) 推荐(0)
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 35 下一页
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3