• 折半思想


    折半思想

    将一个问题已暴力的时间复杂度确定一半, 在以较小的时间复杂度搞定另一半, 统计答案

    Promble 1

    Mark Douglas 是一名律师。他的客户 Yuri Ball 在一场车祸中不幸去世。为了帮助 Yuri 的亲属拿到他的遗产, Mark 需要得到一个密码。在 Yuri 的笔记本上,有一个长为 的只包含小写字母的字符串, Mark 知道密码恰好是将这个字符串分解为两个长度为 的子序列且它们构成的字符串恰好相反的方案数。我们认为两种分解方法是不同的,当且仅当两个下标集合构成的集合 是不同的,注意 和 我们认为是相同的分解方法。如 cabaacba 的合法分解共有 CabaaAcBA 和 CabAacBA 两种。 Mark 希望你能帮助他计算出密码,事成之后他决定分给你 six million five hundred thousand dollars 并邀请你去柬埔寨度假。

    第一行为一个正整数 n。(n <= 18)
    第二行为一个长度为 2*n的字符串,仅包含小写字母。

    我的做法:

    (O(2^n)) 处理出前一半的字符集{s1, s2}, 那么后一半就是{rev(s2), rev(s1)} (O(n^3)) dp来搞一搞

    Promble 2

    给出一些修改, 在二元集合(a, b)中插入或删除, 第一元为关键字, 第二元为权值

    查询时, 给出一个数x, 求x & a == x 的集合权值之和(x, a <= (2^{16}))

    暴力肯定超时

    设s[s1][s2] 为 前二进制下前8位数为s1, 后8位满足x2 & s2 == x2的集合权值之和

    那么我们可以在(O(nsqrt(n))) 干过此题

  • 相关阅读:
    CG_Lession
    linux学习网站大全[转]
    C++ books
    Linux 建议学习路径[转]
    talking C++ STL
    Factory
    计算机图像图形学相关好书推荐
    ASP.NET控件缩写大全
    web开发面试题一
    ASP.Net面试题之二
  • 原文地址:https://www.cnblogs.com/Hs-black/p/11740077.html
Copyright © 2020-2023  润新知