Относительно проблему взрывоозаключения от проблем с летуми кодом (https://leetcode.com/problems/burst-balloons/):образно Индексы, чтобы решить разрыв. Показывает, почему этот подход не удается? »< /p>
public class ppp111 {
static int N, answer;
static int[] balloon; // 풍선 위치 배열
static ArrayList per; // 선택순서
static boolean[] visited; // 방문배열
public static void main(String[] args)throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
StringBuilder sb = new StringBuilder();
// 입력부
int T = Integer.parseInt(br.readLine());
for(int t = 1; t < T + 1; t++){
N = Integer.parseInt(br.readLine());
balloon = new int[N + 1];
per = new ArrayList();
visited = new boolean[N + 1];
answer = 0;
st = new StringTokenizer(br.readLine());
for(int i = 1; i < N + 1; i++) {
int numBalloon = Integer.parseInt(st.nextToken());
balloon = numBalloon;
}
// 알고리즘
// 순열로 가능한 경우 모두 세기
Permutation(0);
// 구한 순서를 이용하여 점수 계산하기
sb.append("#").append(t).append(" ").append(answer).append("\n");
}
// 출력부
System.out.println(sb.toString());
}
public static void Permutation(int depth) {
if (depth == N) {
// 점수계산하기
int score = calScore();
answer = Math.max(answer, score);
return;
} else {
for(int i = 1; i < N + 1; i++) {
if (visited == false) {
visited = true;
per.add(i);
Permutation(depth + 1);
per.remove(per.size() - 1);
visited = false;
}
}
}
}
public static int calScore() {
boolean[] isBoom = new boolean[N + 1]; // 풍선의 터진 여부
int score = 0;
for(int i = 0; i < N; i++) {
int boomBalloon = per.get(i); // 터트릴 풍선
int rightballoon = boomBalloon; // 오른쪽에 풍선이 있는지?
int leftballoon = boomBalloon; // 왼쪽에 풍선이 있는지?
// 오른쪽 탐색
for(int j = boomBalloon + 1; j < N + 1; j++) {
if(isBoom[j] == false) {
rightballoon = j;
break;
}
}
// 왼쪽 탐색
for(int j = boomBalloon - 1; j > 0; j--) {
if(isBoom[j] == false) {
leftballoon = j;
break;
}
}
// 점수계산
// 풍선이 하나 남은 경우
if (rightballoon == boomBalloon && leftballoon == boomBalloon) {
score += balloon[boomBalloon];
} else if (rightballoon == boomBalloon) { // 터트릴 풍선이 제일 오른쪽에 있는경우
score += balloon[leftballoon];
} else if (leftballoon == boomBalloon) { // 터트릴 풍선이 제일 왼쪽에 있는경우
score += balloon[rightballoon];
} else {// 터트릴 풍선이 가운데 있는 경우
score += balloon[rightballoon] * balloon[leftballoon];
}
isBoom[boomBalloon] = true;
}
return score;
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... -when-n-10
Как решить «взрывные воздушные шары», используя перестановки, когда n <10? ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как решить «взрывные воздушные шары», используя перестановки, когда n <10?
Anonymous » » в форуме JAVA - 0 Ответы
- 2 Просмотры
-
Последнее сообщение Anonymous
-