結果
問題 |
No.943 取り調べ
|
ユーザー |
![]() |
提出日時 | 2022-04-24 04:54:02 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 176 ms / 1,206 ms |
コード長 | 876 bytes |
コンパイル時間 | 2,130 ms |
コンパイル使用メモリ | 198,884 KB |
最終ジャッジ日時 | 2025-01-28 21:20:51 |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 24 |
ソースコード
#include <bits/stdc++.h> using namespace std; const int INF = 10000000; int main(){ int N; cin >> N; vector<vector<int>> X(N, vector<int>(N)); for (int i = 0; i < N; i++){ for (int j = 0; j < N; j++){ cin >> X[i][j]; } } vector<int> A(N); for (int i = 0; i < N; i++){ cin >> A[i]; } vector<int> B(N, 0); for (int i = 0; i < N; i++){ for (int j = 0; j < N; j++){ B[i] += X[i][j] << j; } } int ans = INF; for (int i = 0; i < (1 << N); i++){ int S = i; for (int j = 0; j < N; j++){ for (int k = 0; k < N; k++){ if ((S & B[k]) == B[k]){ S |= 1 << k; } } } if (S == (1 << N) - 1){ int sum = 0; for (int j = 0; j < N; j++){ if ((i >> j & 1) == 1){ sum += A[j]; } } ans = min(ans, sum); } } cout << ans << endl; }