후...
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 |