zoukankan      html  css  js  c++  java
  • #14 [BZOJ2090/2089] [Poi2010]Monotonicity 2/Monotonicity

    题解:

    首先想到了标算。。然后证明了一发是错的(事实证明很智障)

    先说正确性比较显然的O(n^2)算法

    令f[i][j]表示前i个物品,匹配到第j个括号,最大值是多少

      g[i][j]表示前i个物品,匹配到第j个括号,最小值是多少

    然后这个转移是O(1)的 状态是n^2的

    被状态局限了就没法优化了

    标算:

    令f[i]表示取第i个的情况下最大到达的位置,f[i+1]由f[ 1-----i ]转移

    我们来证明一下这个的正确性

    原命题:每个f[i]一定是由前面某个f[j]转移过来

    逆命题:其中有一个f[i]是由j的某个非最优状态转移而来

    既然f[i]由j的某个非最优状态转移,那么f[j]+1这个符号一定与a[i],a[j]的大小不符

    举个例子 a[i]是3 a[j]是4 大小关系是>><

    现在f[j]=2,即下一位要求a[j]<a[i] 所以a[i]和a[j]不满足要求

    那么一定是由前面一个>转移的(因为满足a[j]>a[i])

    那我们看一下f[j]是怎么来的 前面一定有个k满足a[k]>a[j]

    那么a[k]>a[j]>a[i] 这样 f[i]一定是可以从a[k]转移而来的

    原命题得证

    然后有了这个dp方程显然线段树优化一下就可以了

  • 相关阅读:
    [LeetCode]Binary Tree Inorder Traversal
    [LeetCode]Binary Tree Preorder Traversal
    [LeetCode]Number of 1 Bits
    [LeetCode]Best Time to Buy and Sell Stock IV
    第四章 线程
    第三章 进程描述和控制
    第二章 操作系统概述
    第一章 计算机系统概述
    Qt创建对话框的三种方法
    strdup函数
  • 原文地址:https://www.cnblogs.com/yinwuxiao/p/8973094.html
Copyright © 2011-2022 走看看