티스토리 뷰

알고리즘/백준(BOJ)

백준 - 1029 그림 교환

시나모온 2020. 9. 24. 19:15

문제 링크입니다 : 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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함