zoukankan      html  css  js  c++  java
  • #1 // BZOJ 4361 isn

    Description

    给出一个长度为n的序列A(A1,A2...AN)。如果序列A不是非降的,你必须从中删去一个数,
    这一操作,直到A非降为止。求有多少种不同的操作方案,答案模10^9+7。
     
    题解:
     
    会发现考虑删除不是很方便,那么考虑它的逆过程插入
    我们已经知道了最后一步它一定是一个非降序列
    然后会发现下一步不满足当且仅当让其依旧不降
    这样的话我们可以用容斥
    首先先算出长度为i的非降序列有多少个
    这个只要f[i][j]表示前i个,降的为j个 f[i][j]=sigma(f[k][j-1]((a[k]<=a[j])
    线段树优化一下 n^2logn
    那么我们令g[i]表示长度为i的方案数
    g[i]=sigma(f[k][i])*(n-i)!
    然后我们就要开始容斥了。。
    刚开始一直在思考和以前那个套路一样是怎么做的。。
    后来发现真是很智障
    g[i+1]的所有方案也只有这些方案对于g[i]来说是不合法的
    所以ans[i]=g[i]-(i+1)*g[i+1]
     
    以前的容斥与这道题的不同就在于
    以前是状态的重复,现在是状态的继承,所以方法也有所不同
     
  • 相关阅读:
    nginx之location、rewrite配置
    nio buffer
    分布式事务
    彻底剖析RMI底层源码 、手写轻量级RMI框架
    Java RMI详解
    Java提高篇——对象克隆(复制)
    序列化
    分布式通信-tcp/ip 广播
    分布式通信-tcp/ip 单播
    php 图像处理 抠图,生成背景透明png 图片
  • 原文地址:https://www.cnblogs.com/yinwuxiao/p/8888607.html
Copyright © 2011-2022 走看看