Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
26929 | liuyile | 【BJ】T3 | C++ | 通过 | 100 | 360 MS | 4820 KB | 1850 | 2024-02-27 14:00:19 |
#include<bits/stdc++.h> #define int long long #define endl "\n" #define pii pair<int,int> #define p1(x) ((x).first) #define p2(x) ((x).second) using namespace std; int n,m,k; const int M=998244353; int pw[100300]; inline int qp(int a,int x){ int res=1; while(x){ if(x&1)res=res*a%M; a=a*a%M; x>>=1; } return res; } int f[2][320][320]; int g[2][320][320]; inline void add(int &x,int y){ x+=y; if(x>=M)x-=M; } signed main(){ // freopen("segment.in","r",stdin); // freopen("segment.out","w",stdout); ios::sync_with_stdio(0); cin>>n>>m>>k; for(int i=1;i<=n;i++) pw[i]=qp(i,k); if(n>m){ cout<<0<<endl; cout.flush(); return 0; } f[0][0][0]=1; for(int i=1;i<=m;i++){ //memcpy(f[1],f[0],sizeof(f[1])); //memcpy(g[1],g[0],sizeof(g[1])); //memset(g[0],0,sizeof(g[0])); //memset(f[0],0,sizeof(f[0])); for(int j=0;j<=n;j++) for(int k=0;k<=n;k++) swap(f[0][j][k],f[1][j][k]), swap(g[0][j][k],g[1][j][k]), f[0][j][k]=g[0][j][k]=0; for(int j=0;j<=n;j++) for(int k=0;k<=n;k++){ add(f[0][j][k],f[1][j][k]); add(g[0][j][k],(g[1][j][k]+pw[k]*f[1][j][k])%M); add(f[0][j+1][k+1],f[1][j][k]); add(g[0][j+1][k+1],(g[1][j][k]+pw[k+1]*f[1][j][k])%M); add(f[0][j+1][k],f[1][j][k]); add(g[0][j+1][k],(g[1][j][k]+pw[k]*f[1][j][k])%M); if(k){ add(f[0][j][k-1],f[1][j][k]); add(g[0][j][k-1],(g[1][j][k]+pw[k-1]*f[1][j][k])%M); } } } cout<<g[0][n][0]<<endl;; cout.flush(); return 0; } /* */