答案为 (inom{n}{m} imes 2^{n-m})
证明1 :
考虑枚举(m)维作为超立方体,令剩余的(n-m)维在(0/1)中任意选择,方案即为选出(m)维的方案和(n-m)维选择(0/1)的方案的乘积即(inom{n}{m} imes 2^{n-m})
证明2 :
首先 (f_{1,1} = 1,f_{1,x(x>1)} = 0.)
对于 (f_{n(n>1),m},) 我们尝试寻找其递推式。
不难发现我们要么是当前一维拿来确定,即在两个(n-1)维超立方体中找出(m-1)维超立方体的方案数,为 (f_{n-1,m-1}.)
或者我们直接递归到两个子超立方体中,此时的答案为 (2f_{n-1,m}.)
不难发现答案即为([x^m](2x+1)^n = inom{n}{m} imes 2^{n-m}.)
code :
#include <bits/stdc++.h>
#define LL long long
using namespace std;
template <typename T> void read(T &x){
static char ch; x = 0,ch = getchar();
while (!isdigit(ch)) ch = getchar();
while (isdigit(ch)) x = x * 10 + ch - '0',ch = getchar();
}
inline void write(int x){if (x > 9) write(x/10); putchar(x%10+'0'); }
const int P = 998244353,N = 100005;
int fac[N],inv[N],nfac[N],pw[N];
inline int C(int n,int m){ return (LL)fac[n] * nfac[m] % P * nfac[n-m] % P; }
int main(){
int i;
fac[0] = nfac[0] = inv[0] = fac[1] = nfac[1] = inv[1] = pw[0] = 1; pw[1] = 2;
for (i = 2; i <= 100000; ++i)
pw[i] = pw[i-1] * 2 % P,fac[i] = (LL)fac[i-1] * i % P,inv[i] = (LL)(P-P/i) * inv[P%i] % P,nfac[i] = (LL)nfac[i-1] * inv[i] % P;
int T,n,m;
read(T);
while (T--) read(n),read(m),write((LL)C(n,m) * pw[n-m] % P),putchar('
');
return 0;
}