Как решить «взрывные воздушные шары», используя перестановки, когда n <10?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как решить «взрывные воздушные шары», используя перестановки, когда n <10?

Сообщение Anonymous »

Относительно проблему взрывоозаключения от проблем с летуми кодом (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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как решить «взрывные воздушные шары», используя перестановки, когда n <10?
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Шары проходят друг через друга в физическом движке
    Anonymous » » в форуме C++
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous
  • Python - самый эффективный способ найти уникальные перестановки чисел (pandas, numpy, itertools...)
    Гость » » в форуме Python
    0 Ответы
    99 Просмотры
    Последнее сообщение Гость
  • Все перестановки С++ с вектором и обратным отслеживанием
    Гость » » в форуме C++
    0 Ответы
    38 Просмотры
    Последнее сообщение Гость
  • Перестановки с повторами, алгоритм с рекурсией
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»