| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1357802 | vjudge1 | A Plus B (IOI23_aplusb) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
int mod = 1e9+7;
bitset<25> a[25];
int dp[25][(1<<20)+5];
int main() {
ios_base::sync_with_stdio(0),cin.tie(0);
int n;cin>>n;
for(int i = 0 ; i<n ; ++i) {
for(int j = 0 ; j<n ; ++j) {
bool b;cin>>b;
a[i][j] = b;
}
}
for(int j = 0 ; j<n ; ++j) dp[0][(1<<j)] = a[0][j];
for(int i = 0 ; i<n-1 ; ++i) {
for(int now = 0 ; now < (1<<n) ; ++now) {
for(int j = 0 ; j<n ; ++j) {
if(now&(1<<j)||!a[i+1][j]) continue;
dp[i+1][now^(1<<j)] += dp[i][now];
if(dp[i+1][now^(1<<j)] >= mod) dp[i+1][now^(1<<j)] -= mod;
}
}
}
cout << dp[n-1][(1<<n)-1] << "\n";
}