RT,代码:
#include <iostream>
#include <map>
using namespace std;
typedef long long ll;
const int mod = 998244353;
ll a[157], sum[157];
map<ll, int> mp[157];
ll dfs(ll n, int m){
if (n < 0 || n > sum[m]) return 0;
if (m == 0) return n == 0 ? 1 : 0;
if (mp[m].count(n)) return mp[m][n];
return mp[m][n] = (dfs(n, m - 1) + dfs(n - a[m], m - 1)) % mod;
}
int main(){
int t;
cin >> t;
for (int i = 1; i <= t; i++){
int m, q, k;
cin >> m >> q;
k = m;
for (int j = 1; j <= m; j++){
cin >> a[j];
}
while (a[k] <= 1e18){
a[++k] = 0;
for (int j = 1; j <= m; j++){
a[k] += a[k - j];
}
}
for (int j = 1; j <= k; j++){
sum[j] = sum[j - 1] + a[j];
mp[j].clear();
}
for (int j = 1; j <= q; j++){
ll x;
cin >> x;
cout << dfs(x, k) << endl;
}
}
return 0;
}