• 折半思想


    折半思想

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

    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))) 干过此题

  • 相关阅读:
    09 Django组件之用户认证组件
    二叉树的三种遍历(非递归)
    CoderForce 141C-Queue (贪心+构造)
    CoderForce 140C-New Year Snowmen(贪心)
    UVA-1663 Purifying Machine (最大匹配数)
    UVA-10801 Lift Hopping (最短路)
    UVA-1660 Cable TV Network (最小割)
    UVA-820 Internet Bandwidth (最大流)
    UVA-1336 Fixing the Great Wall(区间DP)
    棋盘分割(二维区间DP)
  • 原文地址:https://www.cnblogs.com/Hs-black/p/11740077.html
Copyright © 2020-2023  润新知