zoukankan      html  css  js  c++  java
  • ARC114

    ARC114 - Sequence Scores

    题目大意:对于一个序列(A=a_i,a_iin[1,m]),定义(f(A))

    对于一个全零的初始序列,每次选择一个区间对于某一个值取(max),最少生成(A)的步数

    求所有(m^n)(A)(f(A))之和

    首先考虑(f(A))的计算,显然可以采用如下方法

    b[i]=0
    Function Solve(l,r)
    	v=min a[l..r]
    	for i in l,r
    		b[i]=max{b[i],v}
    	Divide a[l..r] into contiguous ranges that a[i]!=b[i] , Solve(l',r')
    	
    

    那么考虑计算一个区间([l,r])( ext{Solve})的次数

    显然区间([l,r])( ext{Solve})当且仅当

    (min{a_i|iin[l,r]}>max(a_{l-1},a_{r+1}))

    对于不同的(r-l+1),枚举(min),计算方案数即可

    注意考虑(l=1or r=n)的边界情况

    const int N=5010,P=998244353;
    
    int n,m;
    int Pow[N][N],F[N][3];
    
    int main(){
    	n=rd(),m=rd();
    	rep(i,0,N-1) rep(j,*Pow[i]=1,N-1) Pow[i][j]=1ll*Pow[i][j-1]*i%P;
    	rep(i,1,n) rep(j,0,2) rep(k,1,m) {
    		F[i][j]=(F[i][j]+1ll*(Pow[m-k+1][i]-Pow[m-k][i]+P)*Pow[k-1][j])%P;
    	}
    	int ans=0;
    	rep(i,1,n) rep(j,i,n) {
    		int c=(i>1)+(j<n);
    		ans=(ans+1ll*F[j-i+1][c]*Pow[m][n-(j-i+1)-c])%P;
    	}
    	printf("%d
    ",ans);
    }
    
  • 相关阅读:
    使用MyBatis生成插件
    关联源码及日志
    下载依赖
    框架简介及基本使用
    注解的本质 及 反射读取属性值
    元注解
    广告系统学习笔记(一)
    Nginx学习笔记(三)
    Nginx学习笔记(二)
    Nginx学习笔记(一)
  • 原文地址:https://www.cnblogs.com/chasedeath/p/14731395.html
Copyright © 2011-2022 走看看