摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=4562 中文题。 这道题的做法是先筛选出那些能够起到分隔雅典娜和怪兽的圆,就是那些只包围雅典娜或者只包围怪兽的圆,这样就分离出两种圆。因为不能同时对这两种圆进行dp,所以我们可以分别dp出最优解之后再对两种圆的最优解进行合并。这种dp就像是LIS,我们需要先对圆的大小进行排序,保证的是大的圆围在小的圆外面,这样就可以避免判断当前圆是否跟那个圆集里任何一个圆相交。代码如下: 1 #include <cstdio> 2 #include <iostream> 3 #include < 阅读全文
posted @ 2013-05-25 21:17
LyonLys
阅读(364)
评论(0)
推荐(0)
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意是给出一棵树,求两点之间的距离。 经典LCA的题,在hdu那里无意中看到的。做法是dfs出一个先根遍历的路径,然后对路径求RMQ,当然,也可以用线段树维护。之后就是对每个询问输出dis[u]+dis[v]-dis[lca(u,v)]*2的值即可。代码如下: 1 //#pragma comment(linker, "/STACK:102400000,102400000") 2 3 #include <cstdio> 4 #include <cstring> 阅读全文
posted @ 2013-05-25 21:06
LyonLys
阅读(156)
评论(0)
推荐(0)
摘要:
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)
摘要:
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)
摘要:
Problem - 1069 随便找到的一道题目。 题意是给出一些的长方体,长方体可以用任意次数,可以任意翻转。如果一个长方体可以叠在另一个长方体上,条件是这个长方体的长和宽严格小于另一个长方体的长和宽。问给出的n种长方体最高可以叠到多高。 因为长方体有三种不同的面,而且长方体的长和宽要严格小于前一个,所以可以将一个长方体拆成三种不同的面作为底面的长方体,而且假设长总是大于宽的。将长方体按照长和宽排序,然后假设len[i]是放置第i个长方体的时候能得到的最大高度,之后的做法基本上跟LIS的操作一样了。 代码如下: 1 #include <cstdio> 2 #include < 阅读全文
posted @ 2013-05-25 00:11
LyonLys
阅读(195)
评论(0)
推荐(0)
浙公网安备 33010602011771号