티스토리 뷰
문제 링크입니다 : www.acmicpc.net/problem/1029
1029번: 그림 교환
첫째 줄에 예술가의 수 N이 주어진다. N은 2보다 크거나 같고, 15보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 N개의 수가 주어진다. i번째 줄의 j번째 수는 j번 예술가가 i번 예술가에��
www.acmicpc.net
DP + 비트마스크 문제였다.
문제를 꼼꼼히 안 읽어서 조건을 잘못 파악했었다. 꼼꼼히 읽는 습관을 들여야겠다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N;
vector<string> adj;
vector<vector<vector<int>>> cache;
int getMaxOwner(int cur, int price, int visited) {
int& ret = cache[cur][price][visited];
if(ret != -1) return ret;
visited |= (1 << cur);
ret = 0;
for(int i = 0; i < adj.size(); i++) {
if(cur != i && adj[cur][i] - '0' >= price && ((visited & (1 << i)) == 0)) {
ret = max(ret, getMaxOwner(i, adj[cur][i] - '0', visited));
}
}
visited ^= (1 << cur);
ret++;
return ret;
}
int main() {
cin >> N;
cache.assign(N, vector<vector<int>>(10, vector<int>((1 << 15) + 1, -1)));
for(int i = 0; i < N; i++) {
string str;
cin >> str;
adj.push_back(str);
}
cout << getMaxOwner(0, 0, 0);
return 0;
}
개발 환경 : vscode
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > 백준(BOJ)' 카테고리의 다른 글
백준 - 10711 모래성 (0) | 2020.10.03 |
---|---|
백준 - 2623 음악프로그램 (0) | 2020.09.24 |
백준 - 14890 경사로 (0) | 2020.09.11 |
백준 - 10942 팰린드롬? (0) | 2020.08.28 |
백준 - 1120 문자열 (0) | 2020.08.28 |
댓글