Shu-How Zの小窝

Loading...

2025 11 11

  • CF1743E dp 2400
    • 很关键的性质 每当做第二次操作,我们的两个都会清零回到初始位置
    • 我们可以发现我的操作是由一段单独的+合体+一段单独的+合体+……
    • 故我们可以定义 \(f_i\) 为初始两激光都没有充能一段单独+合体打出 \(i\) 的最少时间,\(dp_i\) 为初始两激光都没有充能打出 \(i\) 的最少时间(由若干次(若干单发+合体)组成)
    • 故枚举 \(j >= 0\)\((p_1 - s) \cdot j < i\) 表示第一种所单独打出的次数,则第二种单独打出的次数为 \(\frac{i-((p_1-s)\cdot j)-(p_1+p_2-s)}{p_2-s}\) (向上取整并对0取max记这个为 \(T\)) 则 \(f_i \min(max((j+1) \cdot t_1, (T+1) \cdot t_2))\)
    • 很容易可以发现 \(dp_i = \min_{j=0}^{i} dp_j + f_{i-j}\)
    • 答案等于 \(\min_{i >= h} dp_i\)
  • CF2056D 性质题 2200
    • 这个我还是想了很久的,就是我去想到底该怎么统计符合条件的答案,大概20多min吧,实在不行了看了题解发现了它是考虑计算不合法的,然后我看到这个我就继续往下想
    • 考虑不合法的序列满足什么条件
    • 可以发现若存在 \(x\) 且小于它的数等于区间长度的一半且它自己出现了
    • 然后我们发现这个值域很小所以大概率是枚举这个 \(x\) 是什么
      • 记录 \(cnt_i\) 表示前 \(i\) 个数中小于 \(x\) 的个数
      • 则满足条件的要求即为 \(cnt_r - cnt_{l-1} = \frac{r-l+1}{2}\) 即为 \(2\cdot cnt_r - r = 2 \cdot cnt_{l-1} - l + 1\)
      • 然后我们考虑如何满足 \(x\) 出现这件事,我们可以预处理 \(nxt_i\) 表示 \(x\) 出现的下一次位置,故我们可以枚举左端点,用 map 记录右端点的值再用双指针即可
    • 正难则反,遇到求合法数不妨想想求总数-不合法数
  • P7514
    • 排序+双指针 秒
  • CF2086E dp,贪心 2400
    • 首先我们考虑这个斑马数的个数肯定是 \(<=30\)
    • 然后第 \(i\) 个斑马数为 \(a_i = 4 \cdot a_{i-1} + 1, a_1 = 1\)
    • 我们发现一个数 \(x\) 要分解成若干个斑马数,肯定是从 \(a_i <= x\) 的最大的斑马数开始分解,考虑为什么
      • 反证法
        • \(n\) 为第一个违反条件的数,则不存在 \(n\) 的最优分解中有 \(a_jmax <= n\) 的方案
        • 设分出来的最大的数为 \(a_j\)
          • \(j < i-1\) 因为 \(x - a_j\) 满足条件,所以一定会存在 \(a_{i-1}\) 的分解所以舍去
          • \(j = i-1\) 则至少会有 4 个 \(a_{i-1}\),还不如直接用 \(a_{i+1}\) 再把一个 \(a_j\) 换成四个 \(a_{j-1}\)\(j=1\) 则直接去掉一个 \(a_j\)
        • 所以可以证明从大到小贪心地选斑马数一定是最优的
    • 所以我们可以得出结论若 \(x = \sum_{i=1} v_i \cdot a_i\)\(\max(v_i) <= 4\)
    • 故所有数的斑马值不会超过 120
    • 我们可以很套路的想到定义 \(dp_{i,j}\) 表示 \(1-i\) 的数中斑马数为 \(j\) 的个数,则 \(dp_{i,j} = dp_{i-mx,j-1} + dp_{mx-1,j}\) (其中mx为小于等于 \(i\) 的最大的斑马数)
    • \(j\) 的数量级将是 \(\log A\),因此我们来估算一下所需的不同 \(i\) 值的数量。我们将它们分为斑马数 \(i\) 和所有其他数。
    • 如果 \(i\) 是斑马数,那么前一个斑马数是 \(k = \frac{i - 1}{4}\)。因此,\(dp_{i,j} = dp_{k,j} + dp_{i-k,j-1} = \dots = dp_{k,j} + dp_{k,j-1} + dp_{k,j-2} + dp_{k,j-3} + dp_{1,j-4}\)。由此可见,当 \(i\) 是斑马数时,这些状态会生成 O(1) 个新状态,因此总体上,\(i\) 是斑马数的状态以及由它们生成的状态将仅需要 \(O(\log A)\) 个不同的 \(i\) 值。
    • 如果 \(i\) 不是斑马数,其中一个状态转移会导向一个斑马数的状态,而另一个则不会。也就是说,从每个状态出发,存在一个由非斑马数的 \(i\) 值构成的状态"链",这样的链长度是 \(O(\log A)\)
    • 所以,状态总数将是 \(O(\log^2 A)\)
posted @ 2025-11-11 16:46  睡神本神  阅读(8)  评论(0)    收藏  举报