hdu 1257 최소 차단 시스템

처음에는 미사일 시스템 이 서로 인접 한 몇 개의 미사일 만 칠 수 있다 는 뜻 을 잘못 이해 했다 가 서로 다른 미사일 시스템 이 서로 엇 갈 려 칠 수 있다 고 생각 했다.
현재 모든 미사일 시스템 이 칠 수 있 는 가장 높 은 미사일 을 저장 하기 위해 dp 배열 을 개발 하 는 전략 을 취 하 는 것 이다. 그 길 이 는 len 이 미사일 시스템 의 개수 이다.
새로 날 아 온 미사일 높이 h 는 dp 에서 h 보다 크 고 dp 의 모든 수 에서 가능 한 한 작은 숫자 (가능 한 한 많은 미사일 을 치기 위해) 를 찾 습 니 다. 찾 으 면 dp 를 h 로 업데이트 합 니 다 (이 미사일 시스템 은 앞으로 h 보다 작 을 수 밖 에 없 기 때 문 입 니 다.
미사일 을 찾 지 못 하면 새로운 미사일 시스템 을 추가 해 야 한 다 는 뜻 이다. dp [len + +] = h
#include <iostream>
#include <cstdio>

using namespace std;

int a[10005];
int dp[10005];

int main()
{
	int N;
	while (~scanf("%d", &N)) {
		for (int i = 0; i < N; i++)
			scanf("%d", &a[i]);
		int len = 0;
		for (int i = 0; i < N; i++) {
			bool flag = false;
			for (int j = 0; j < len; j++) {
				if (dp[j] >= a[i]) {  //  
					dp[j] = a[i];  //  dp
					flag = true;
					break;
				}
			}
			if (!flag) {
				dp[len++] = a[i];  // dp        a[i]       
			}
		}
		printf("%d
", len); } return 0; }

좋은 웹페이지 즐겨찾기