RT,但源代码在任何平台都能过啊
是不是数组开大了或其它之类玄学问题?
#include <cstdio>
#define QYX using
#define AKs namespace
#define IOI std
#define easily ;
#define p 998244353
QYX AKs IOI easily
const int M = 125;
int dp[M][M][M][M]; //place, tot_of_filling_in, end, tot_of_1(1-n) val = quanzhi
int n, m, K, v[M][M], ans, C[M][M];
void add(int &a, int b){
a += b; if(a > p) a -= p;
}
int cal(int t){
int ans = 0;
for(; t; t >>= 1) ans += (t&1);
return ans;
}
void pre(int n){
for(int i = 0; i <= n; i++){
C[i][0] = 1;
for(int j = 1; j <= i; j++) add(C[i][j], C[i-1][j-1] + C[i-1][j]);
}
}
int main(){
//freopen("sequence.in", "r", stdin);
//freopen("sequence.out", "w", stdout);
scanf("%d %d %d", &n, &m, &K); pre(105);
for(int i = 1; i <= m+1; i++){
scanf("%d", &v[i][1]); v[i][0] = 1;
for(int j = 1; j <= n+5; j++) v[i][j] = 1ll * v[i][j-1] * v[i][1] % p;
}
dp[1][0][0][0] = 1;
for(int i = 1; i <= n; i++) dp[1][i][i][0] = v[1][i];
for(int i = 1; i <= m; i++){ //place_to_fill
for(int j = 0; j <= n; j++){ //tot_of_filling_in
for(int k = 0; k <= j; k++){ //now
for(int l = 0; l <= j; l++){ //tot_of_1
for(int t = 0; t <= n - j; t++){ //to
add(dp[i+1][j+t][t+k/2][l+k%2], 1ll * C[j+t][t] * v[i+1][t] % p * dp[i][j][k][l] % p);
// printf("%d %d %d %d -> %d %d %d %d (%d) C * v * val1 = %d * %d * %d = val2 = %d\n", i, j, k, l, i+1, j+t, t+k/2, l+k/2%2, t, C[j+k][k], v[i+1][t], dp[i][j][k][l], dp[i+1][j+t][t+k/2][l+k/2%2]);
}
}
}
}
}
for(int k = 0; k <= n; k++){
for(int l = 0; l <= n; l++){
if(l + cal(k) <= K) add(ans, dp[m+1][n][k][l]);
}
}
printf("%d\n", ans);
return 0;
}