[topcoder]FlowerGarden

1318 단어 topcoder
1. 이 문 제 는 DP 를 겨우 계산한다.한참 동안 인터넷 사 고 를 찾 았 는데 3 층 의 순환 이 었 습 니 다. n ^ 3.2. 기본 적 인 사고방식 은 첫 번 째 자리 에 있 는 꽃 을 먼저 찾 는 것 이다.이렇게 두 겹 으로 옮 겨 다 니 며 다른 충돌 하지 않 는 꽃 중 가장 높 은 것 을 찾 아 결과 의 첫 번 째 에 놓는다.그리고 이 꽃 을 없 애고 남 은 꽃 에 대해 계속 사용 하 세 요.3. 주의해 야 할 것 은 먼저 a 와 b, b 와 c 가 충돌 하지만 a 와 c 가 반드시 충돌 하 는 것 은 아니다.4. 두 단락 의 중첩 여 부 를 판단 하 는 가장 간단 한 식 은!(a.start > b.end || b.start > a.end)
사고방식 안에 또 하나의 도형 방법 이 있어 서 자세히 보지 못 했다.
public class FlowerGarden {

	public int[] getOrdering(int[] height, int[] bloom, int[] wilt) {

		int len = height.length;

		if (len == 0) return height; // assert length != 0

		int order[] = new int[len];

		boolean used[] = new boolean[len];



		for (int i = 0; i < len; i++) {

			int mxH = 0;

			int pos = -1;

		

			for (int j = 0; j < len; j++) {

				if (used[j]) continue;

				boolean found = true;

				for (int k = 0; k < len; k++) {

					if (used[k]) continue;

					boolean blocking = !(bloom[j] > wilt[k] || bloom [k] > wilt[j]);

					if (height[j] > height[k] && blocking) {

						found = false;

						break;

					}

				}

				if (found) {

					if (height[j] > mxH) {

						mxH = height[j];

						pos = j;

					}

				}

			}

			order[i] = height[pos];

			used[pos] = true;

		}

		return order;

	}

}


좋은 웹페이지 즐겨찾기