結果
問題 | No.2711 Connecting Lights |
ユーザー |
![]() |
提出日時 | 2024-03-31 14:42:04 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 174 ms / 5,000 ms |
コード長 | 878 bytes |
コンパイル時間 | 2,021 ms |
コンパイル使用メモリ | 198,980 KB |
最終ジャッジ日時 | 2025-02-20 17:22:49 |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 27 |
ソースコード
#include <bits/stdc++.h>using namespace std;using lint = long long;int main() {lint n, m, K;cin >> n >> m >> K;vector dp(m+1, vector<lint>((1<<n), 0));const lint MOD = 998244353;// i列目まで見て、i列目がjのときの場合数dp[0][0] = 1;for (int i = 0; i < m; i++) {for (int j = 0; j < (1<<n); j++) {for (int k = 0; k < (1<<n); k++) {// jとkの組み合わせok?int cnt = 0;for (int l = 0; l < n; l++) {if ((1<<l)&j&k) cnt++;}if (i == 0 || cnt >= K) {// 遷移できるdp[i+1][k]+=dp[i][j];dp[i+1][k] %= MOD;}}}}lint ans = 0;for (int i = 0; i < (1<<n); i++) {ans += dp[m][i];}cout << ans%MOD << endl;return 0;for (auto x : dp) {for (auto y : x) cout << y << " ";cout << endl;}}