후...

2023. 8. 29. 23:11알고리즘

https://www.acmicpc.net/problem/17825

 

잘안돼서 다시 풀어바야겠따 ㅠㅠ

#include <iostream>
#include <vector>
#include <cstring>

using namespace std;

int dice[10];
int map[42];
int turn[42];
int score[42];
int which[4];
int check[42];
int ans;
 
void dfs(int cnt, int sum){
    if (cnt==10){
        ans = max(ans, sum);
        return;
    }
    for (int i=0;i<4;i++){
        int move = dice[cnt];  // 몇번 돌아야하나
        int before = which[i];
        int now = which[i];
        if (turn[which[i]]!=0){ // 만약에 돌아야하는 위치에 있다면
            move--;
            now = turn[now];// 한번 move를 했다고 하고 그 다음 말로 이동해준다
        }
        while (move--){ //이동시켜준다
            now = turn[now];
        }
        if (now!=21 && check[now]==true) continue;
        check[before]=0;
        check[now]=1;
        which[i]=now;
        dfs(cnt+1, sum+score[now]);
        check[before]=1;
        check[now]=0;
        which[i]=before;

    }
}
int main(void){
    cin.tie(NULL);
    ios::sync_with_stdio(false);
    for (int i=0;i<10;i++){
        cin>>dice[i];
    } 
    for (int i=0;i<25;i++){
        map[i] = i+1;
    }
    memset(turn, 0, sizeof(turn));
    memset(which, 0, sizeof(which));
    memset(check, 0, sizeof(check));
    map[31]=32, map[32]=25, map[28]=29, map[29]=30, map[30]=25;
    map[26]=27, map[27]=20, map[21]=21;
    turn[5]=22, turn[10]=31, turn[15]=28;
    for (int i=0;i<21;i++){
        score[i]=i*2;
    }
    score[22]=13, score[23]=16, score[24]=19, score[26]=30;
    score[27]=35, score[31]=22, score[32]=24, score[28]=28;
    score[29]=27, score[30]=26, score[25]=25;
    
    dfs(0, 0);
    cout<<ans<<endl;
    return 0;
}

'알고리즘' 카테고리의 다른 글

백준 14503 C++ 로봇청소기  (0) 2023.09.15
백준 14500 테트로미노 c++ (dfs)  (0) 2023.09.01
백준 16234 인구이동 C++  (0) 2023.08.23
백준 이차원 배열과 연산 17140 C++  (1) 2023.08.22
백준 16236 아기상어 C++  (5) 2023.08.18