zoukankan      html  css  js  c++  java
  • [CF1093F]Vasya and Array

    link

    题目大意

    给你一个长度为$n$的数字串,其中$-1$的表示可以填$1$~$k$中任意一个数,其余数的范围也是从$1$~$k$。而对于连续$len$个数都不是相等的。问有多少种方案。

    试题分析

    容易发现此题是一个计数类$dp$。我们定义$f(i,j)$表示第$i$位选$j$的方案数,$ans[i]=sum_{j=1}^k f(i,j)$。这时要有一个问题需要考虑,就是连续$len$个数不能重复,此时就要多定一个数组$del[u]$表示从当前位置之前数$len-1$个选$u$的方案数。就是为后面的$dp$做准备。所以若现在位置为$i$,则$del[u]=ans[i-len+1]-dp[i-len+1][u]$。然后$dp(i,j)$就为$dp(i,j)=ans[i-1]-del[j]$。

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #define int long long
    #define mod 998244353
    using namespace std;
    inline int read(){
        int f=1,ans=0;char c=getchar();
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+c-'0';c=getchar();}
        return f*ans;
    }
    const int N=100001;
    const int K=101;
    int dp[N][K],n,ans[N],cnt[K],del[K],a[N],k,len;
    signed main(){
        n=read(),k=read(),len=read();
        if(len==1){cout<<0;return 0;}
        for(int i=1;i<=n;i++) a[i]=read();
        ans[0]=1;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=k;j++){
                if(a[i]==j||a[i]==-1){
                    dp[i][j]=(ans[i-1]-del[j]+2*mod)%mod;
                    cnt[j]++;
                    if(cnt[j]>=len-1) del[j]=ans[i-len+1]-dp[i-len+1][j],del[j]=(del[j]+2*mod)%mod;
                    ans[i]+=dp[i][j];
                    ans[i]%=mod;
                }else{
                    cnt[j]=0;
                    del[j]=0;
                }
            }
        }
        printf("%I64d
    ",ans[n]);
    }
    View Code

     update $2020.11.23$

    https://www.luogu.com.cn/blog/dengyaotriangle/ran-se-ti-xie

    考虑化简 $dp$ 数组,线性推关系即可。 $orzspace dengyaotriangle$ 。

  • 相关阅读:
    Ubuntu 下安装QT
    Ubuntu下配置Samba服务器
    二进制、八进制、十进制、十六进制之间转换
    Oracle_创建和管理表
    Oracle_数据处理
    单例模式
    01.DesignParttern设计模式,简单工厂,工厂方法,抽象工厂三大工厂的区别与联系
    MAC系统中的轻量级图像浏览器Lyn1.9
    MAC系统的绝佳截图工具Snipaste
    MAC系统的绝佳截图工具Snipaste
  • 原文地址:https://www.cnblogs.com/si-rui-yang/p/10133215.html
Copyright © 2011-2022 走看看