组合题6 个小题
已作答 0 / 6
1#include <iostream>2#include <string>3using namespace std;4 5const int P = 998244353, N = 1e4 + 10, M = 20;6int n, m;7string s;8int dp[1 << M];9 10int solve() {11 dp[0] = 1;12 for (int i = 0; i < n; ++i) {13 for (int j = (1 << (m - 1)) - 1; j >= 0; --j) {14 int k = (j << 1) | (s[i] - '0');15 if (j != 0 || s[i] == '1')16 dp[k] = (dp[k] + dp[j]) % P;17 }18 }19 int ans = 0;20 for (int i = 0; i < (1 << m); ++i) {21 ans = (ans + 1ll * i * dp[i]) % P;22 }23 return ans;24}25 26int solve2() {27 int ans = 0;28 for (int i = 0; i < (1 << n); ++i) {29 int cnt = 0;30 int num = 0;31 for (int j = 0; j < n; ++j) {32 if (i & (1 << j)) {33 num = num * 2 + (s[j] - '0');34 cnt++;35 }36 }37 if (cnt <= m) (ans += num) %= P;38 }39 return ans;40}41 42int main() {43 cin >> n >> m;44 cin >> s;45 if (n <= 20) {46 cout << solve2() << endl;47 }48 cout << solve() << endl;49 return 0;50}51 假设输入的 s 是包含 n 个字符的 01 串,完成下面的判断题和单选题。
输入 11 2 10000000001 时,程序输出两个数 32 和 23。( )