[AtCoder] ABC 147 C – HonestOrUnkind2
問題
方針
ビット全探索
ある人は正直者か不親切な人かの \( 2 \) 通りなので、全体で \( 2^N \) のパターンがあります。なので、ビット全探索を行います。人 \( i \) が正直者としたとき、その証言が現在のビットの状態と同じかどうかを調べることで最大値を求めることができます。
コード
#include <bits/stdc++.h> using namespace std; typedef long long ll; int ans = 0; int N; int A[15], x[15][15], y[15][15]; int bit[15]{}; void solve() { int t = 0; for (int i = 0; i < N; i++) { if (bit[i] == 1) t++; } for (int i = 0; i < N; i++) { if (bit[i] == 0) continue; for (int j = 0; j < A[i]; j++) { if (bit[x[i][j]] != y[i][j]) return; } } ans = max(ans, t); } void rec(int k) { if (k == N) { solve(); return; } rec(k + 1); bit[k] = 1; rec(k + 1); bit[k] = 0; } int main() { cin >> N; for (int i = 0; i < N; i++) { cin >> A[i]; for (int j = 0; j < A[i]; j++) { cin >> x[i][j] >> y[i][j]; x[i][j]--; } } rec(0); cout << ans << "\n"; return 0; }
ディスカッション
コメント一覧
まだ、コメントがありません