zoukankan      html  css  js  c++  java
  • 快乐的一天从AC开始 | 20210806 | CF1549E

    题目链接

    每日吐槽

    今天无心上班,摸鱼,之后估计又要忙起来了

    早下班欧耶

    心路历程

    看题解才做出来的

    思路

    解法1

    看完之后很容易能写出(ans = sum_{i = 1}^{n} C_{3i}^{x}),对于每一个(x)都求出答案,之后回答询问就可以(O(1))了。

    然后可以用动态规划加速求解,记(dp_{x, y} = sum_{i = 0}^{n - 1} C_{3_i + y}^{x}, 0 le y le 2),那么有(ans = dp_{x, 0} + C_{3n}^{x}),且(dp_{x, 0} = dp_{x, 1} = dp_{x, 2} = n)

    然后就可以推出:

    • (dp_{x + 1, 1} = dp_{x, 0} + dp_{x + 1, 0})
    • (dp_{x + 1, 2} = dp_{x, 1} + dp_{x + 1, 1})

    还有(dp_{x + 1, 0})不知道咋求,多了3个未知数,但只有两个方程,还差一个方程才能解。

    (dp_{x, 0})(dp_{x, 1})(dp_{x, 2})加起来有(dp_{x, 0} + dp_{x, 1} + dp_{x, 2} = C_{3n}^{x + 1}),把左边都拆成和式就是(sum_{i = 1}^{3n - 1} C_{i}^{x}),而右边相当于将选出来的最大的数作为(i),然后再选。这一步我只是感性理解,其实就是Hockey Stick Identity。

    然后现在3个未知数,3个方程,解起来应该没啥问题吧

    解法2

    用生成函数也能做,不过懒得写了

  • 相关阅读:
    Centos7使用systemd 管理elasticsearch,创建elasticsearch服务
    nginx日志切割的2种方法
    sudo linux
    redis 重启不了
    类与对象
    用Python写一个小的购物车
    包的使用
    Python模块简介
    zookeeper & Dubbo
    迭代器 & 生成器
  • 原文地址:https://www.cnblogs.com/zengzk/p/15111705.html
Copyright © 2011-2022 走看看