#include <iostream> #include <string> #include <stdio.h> #include <vector> #include <list> #include <algorithm> using namespace std; void work(int c); int main() { int n = 1; //cin >> n; for (int i = 1; i <= n; ++i) work(i); } // n >= 2 && n <= 15 int ret = 1; int n; vector<bool> canBuy(16, true); int matrix[16][16]; char table[1 << 16][10][16]; void trace(int i, int currPrice, int count,unsigned int i32u) { auto &r = table[i32u][currPrice][i]; if (r != -1)return; i32u |= (1 << i); for (int j = 0; j < n; ++j) { if (i == j || (i32u & (1 << j))) continue;//살 수 없거나 자기자신이거나. if (matrix[i][j] < currPrice) continue; //지금 가격보다 저렴하게 사고 싶은 친구들은 건너뛰어야. trace(j, matrix[i][j], count + 1, i32u); r = max(int(r), count + 1); } ret = max(int(r), ret); } void work(int c) { for (int i = 0; i < (1 << 16); ++i) for (int j = 0; j < 10; ++j) for (int k = 0; k < 16; ++k) table[i][j][k] = -1; cin >> n; char t; for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) { cin >> t; matrix[i][j] = t - '0'; } //matrix를 먼저 받아야 뭐가 되겠지 trace(0, 0, 1,0u); cout << ret << endl; }  품