9도 OJ 1131: 합창대형(DP, 최장 상승 하강 서열)
메모리 제한: 32메가
특수 판제:아니오
제출: 2865
해결: 881
제목 설명:
N명의 학우들이 한 줄로 서 있는데 음악 선생님은 그 중의 (N-K) 학우들을 불러서 나머지 K명의 학우들이 자리를 바꾸지 않고 합창 대형을 만들 수 있도록 해야 한다.합창대형은 K명의 학우를 왼쪽에서 오른쪽으로 순서대로 번호가 1,2,...,K로 하고 그들의 키가 각각 T1,T2,...,TK로 하면 그들의 키는 T1
입력:
입력한 첫 번째 행은 전체 학생 수를 나타내는 정수 N(2 <= N <= 100)입니다.첫 줄에는 n개의 정수가 있고 빈칸으로 구분되며 i번째 정수인 Ti(130<=Ti<=230)는 i번째 동창의 키(센티미터)다.
출력:
여러 그룹의 테스트 데이터를 포함할 수 있고 각 그룹의 데이터에 대해 출력은 한 줄을 포함한다. 이 줄은 하나의 정수만 포함하는데 적어도 몇 명의 학우가 열을 내야 한다.
샘플 입력:
8
186 186 150 200 160 130 197 220
샘플 출력:
4
출처:
2008년 북경대학 방정실험실 컴퓨터 연구 생기 시험 진제
아이디어:
동적 기획은 i개수를 가장 오른쪽 수로 하는 최장 상승 서열과 i개수를 가장 왼쪽 수로 하는 최장 하강 서열을 구한다.
마지막으로 i개수가 가장 높은 수의 최장자 서열 길이를 구한다.나머지는 바로 줄을 서야 하는 학우들이다.
최장 상승 서열은 더 좋은 해결 방법이 있다.
코드:
#include <stdio.h>
#define N 100
int big[N], count;
int up[N], down[N];
void print(int x[N], int c)
{
for (int i=0; i<c; i++)
printf("%d ", x[i]);
printf("
");
}
int binSearch(int begin, int end, int k)
{
if (end == -1)
return -1;
if (begin == end)
{
if (big[begin] < k)
return begin;
else
return -1;
}
int mid = (begin+end)/2;
if (big[mid+1] >= k)
return binSearch(begin, mid, k);
else
return binSearch(mid+1, end, k);
}
int insert(int k)
{
int j;
j = binSearch(0, count-1, k);
//printf("j=%d, count=%d
", j, count);
if (j == count-1 || big[j+1] > k)
{
big[j+1] = k;
if (j == count-1)
count ++;
}
//print(big, count);
return j+2;
}
int main(void)
{
int a[N], n, i;
while (scanf("%d", &n) != EOF)
{
for(i=0; i<n; i++)
scanf("%d", &a[i]);
count = 0;
for(i=0; i<n; i++)
up[i] = insert(a[i]);
count = 0;
for(i=n-1; i>=0; i--)
down[i] = insert(a[i]);
int max = 0;
for (i=0; i<n; i++)
{
if (up[i]+down[i] > max)
max = up[i]+down[i];
}
printf("%d
", n-max+1);
}
return 0;
}
/**************************************************************
Problem: 1131
User: liangrx06
Language: C
Result: Accepted
Time:350 ms
Memory:916 kb
****************************************************************/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【경쟁 프로 전형적인 90문】008의 해설(python)의 해설 기사입니다. 해설의 이미지를 봐도 모르는 (이해력이 부족한) 것이 많이 있었으므로, 나중에 다시 풀었을 때에 확인할 수 있도록 정리했습니다. ※순차적으로, 모든 문제의 해설 기사를 들어갈 예정입니다. 문자열...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.