diff --git a/_munhyeong/1029.cpp b/_munhyeong/1029.cpp new file mode 100644 index 00000000..ee246d0e --- /dev/null +++ b/_munhyeong/1029.cpp @@ -0,0 +1,41 @@ +#include +#include + +using namespace std; + +int recursive(vector> &price, vector>> &dp, int visited, int artist, int boundary) { + int& ret = dp[visited][artist][boundary]; + if (ret != -1) + return ret; + + ret = 0; + for (int i = 1; i < price.size(); i++) { + if (!(visited & (1 << i)) && price[artist][i] >= boundary) { + int next_visited = visited | (1 << i); + ret = max(ret, recursive(price, dp, next_visited, i, price[artist][i]) + 1); + } + } + + return ret; +} + +int main() { + int N; + cin >> N; + + vector> price(N, vector(N)); + for (int i = 0; i < N; i++) { + string input; + cin >> input; + + for (int x = 0; x < N; x++) + price[i][x] = input[x] - '0'; + } + + vector>> dp(1 << N, vector>(N, vector(10, -1))); + recursive(price, dp, 1, 0, 0); + + cout << dp[1][0][0] + 1; + + return 0; +}