• 重返现世


    III.重返现世

    考虑扩展minmax定理:

    [ ext{Kthmax}(mathbb S)=sumlimits_{mathbb{Tsubseteq S}}(-1)^{|mathbb T|-K}dbinom{|mathbb T|-1}{K-1}min(mathbb T) ]

    因为本题方便求的是 (min(mathbb T)),但是要求的却是 ( ext{Kthmin}),所以我们不妨翻转 (K) 变成 ( ext{Kthmax})。并且,注意到有一行 (n-kleq10),故翻转后亦有 (Kleq10)

    现在,考虑 (min(mathbb T)) 应该怎么求。显然,其就是抽到任意 (mathbb T) 中元素的期望时间,即 (dfrac m{sumlimits_{iinmathbb T}a_i})

    但是,明显我们不能枚举所有 (mathbb T),因为 (n) 过大。但是,注意到 (m) 很小,故我们可以将 (m) 带进DP状态里。又因为那个不知道有啥用的 (K) 也很小,所以我们考虑将它也带进状态。

    于是我们设计了这样的状态:(f_{k,i,j}) 表示 (K=k),当前考虑了前 (i) 个数,且 (sumlimits_{iinmathbb T}a_i=j) 时,(sumlimits_{mathbb{Tsubseteq S}}(-1)^{|mathbb T|-K}dbinom{|mathbb T|-1}{K-1}) 之和。

    现在,考虑 (a_i) 选还是不选。如果不选,显然有 (f_{k,i,j}leftarrow f_{k,i-1,j})

    那如果选呢?我们考虑由 (f_{k,i-1,j}) 转移到 (f_{k,i,j+a_i})。在前面的式子中,仅有 (|mathbb T|) 一项产生了变化。((-1)^{|mathbb T|-K}) 这项随着 (|mathbb T|) 加一取反了,而 (dbinom{|mathbb T|-1}{K-1}) 这项呢?

    依照二项式系数的递推公式,我们有 (dbinom{|mathbb T|-1}{K-1}=dbinom{|mathbb T|-2}{K-1}+dbinom{|mathbb T|-2}{K-2})。这意味着,(sumlimits_{mathbb{Tsubseteq S}}(-1)^{|mathbb T|-K}dbinom{|mathbb T|-1}{K-1}=-sumlimits_{mathbb{Tsubseteq S}}(-1)^{|mathbb T|-K}dbinom{|mathbb T|-2}{K-1}+sumlimits_{mathbb{Tsubseteq S}}(-1)^{|mathbb T|-K}dbinom{|mathbb T|-2}{K-2})(注意到仅有前面是个减号,因为 (K-2) 这项需要取两次反,等于没取,而前面这项取一次反),即 (f_{k,i,j}leftarrow f_{k-1,i-1,j-a_i}-f_{k,i-1,j-a_i})

    明显是背包的样式,故 (i) 这维可以压掉。

    关键是初始状态。事实上,(f_{0,0,0}=0),对于非零的 (k)(f_{k,0,0}=-1),这个奇奇怪怪的边界被证明是正确的。具体可以通过反推得出。

    时间复杂度 (O(nmk))

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int mod=998244353;
    int ksm(int x,int y=mod-2){int z=1;for(;y;y>>=1,x=1ll*x*x%mod)if(y&1)z=1ll*z*x%mod;return z;}
    int n,m,K,a[1010],f[11][10100],res;
    int main(){
    	scanf("%d%d%d",&n,&K,&m),K=n-K+1;
    	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    	for(int k=1;k<=K;k++)f[k][0]=mod-1;
    	for(int i=1;i<=n;i++)for(int k=K;k;k--)for(int j=m;j>=a[i];j--)(f[k][j]+=(f[k-1][j-a[i]]-f[k][j-a[i]]+mod)%mod)%=mod;
    	for(int i=1;i<=m;i++)(res+=1ll*f[K][i]*ksm(i)%mod)%=mod;
    	printf("%d
    ",1ll*res*m%mod);
    	return 0;
    }
    

  • 相关阅读:
    010-SaltStack及SaltStack Web UI安装部署
    004-linux下配置rsyslog日志收集服务器案例 rsyslog+loganalyzer日志服务器,无法添加报表模板解决
    003-centos7:rsyslog简单配置客户端和服务器端
    002-loganalyzer装完报错no syslog records found
    001-CentOS 7系统搭建Rsyslog+LogAnalyzer解决交换机日志收
    009(1)-saltstack之salt-ssh的使用及配置管理LAMP状态的实现
    009-saltstack之salt-ssh的使用及配置管理LAMP状态的实现
    008-saltstack之salt-ssh
    CentOS7+ 普通用户使用密钥登陆服务器(同时禁用root登陆)
    jq如何判断是否存在某个指定的style样式
  • 原文地址:https://www.cnblogs.com/Troverld/p/14636937.html
Copyright © 2020-2023  润新知