2013第一场多校

多校第一场:
1011 http://acm.hdu.edu.cn/showproblem.php?pid=4610
(1)、将每个数对应的4种情况求出来,并保存每个数对应的状态。
(2)、问题转化为:共有16种卡牌,每种卡牌可以选ai个,选了某种卡牌将得到bi的权值。将所有选定的bi进行|运算,若4位中的某一位为0,则需要额外的花费。
(3)、直接进行2^16的枚举,表示某种物品选还是不选,每个物品至少选一个,然后剩下的物品按权值从大到小贪心。

1002 http://acm.hdu.edu.cn/showproblem.php?pid=4601
(1)、将原树映射到一棵字典树上。
(2)、在原树上进行DFS,求出每个节点属于哪一层,并保存dfs的时间戳,保存hash值。
(3)、将不同层的节点保存到对应的vector中,并按照时间戳排序。
(4)、求出字典树上每个节点对应的权值。(越小字典序越大)
(5)、给定祖先节点u与相对长度,按照时间戳可以二分出子孙节点在对应某一深度的vector中的范围。
(6)、在给定范围内,进行RMQ求出某一节点映射到字典树上的权值最小,找到这一节点,然后通过hash值的运算,得到答案。

1007 http://acm.hdu.edu.cn/showproblem.php?pid=4606     几何,最小路径覆盖
(1)、将线段拆成两点,求出包括城市内n+2m个点内,每两点之间是否能够直接相连。若能,则dis[i][j]=caldis(i,j),否则dis[i][j]=Inf;
(2)、使用floyd预处理每两点之间距离。
(3)、二分背包的大小。因为城市有占领的先后顺序,所以若两点之间距离小于背包大小,则在两点之间连接一条有向边。最后构出来的图是一个有向无环图,于是可以转化为最小路径覆盖问题。直接用二分匹配作为check,二分背包大小得到答案。

原文地址:https://www.cnblogs.com/CooCoo/p/3235181.html