Longest Increasing Sequence(LIS) 정답 코드
뿌리튼튼 CS/Algorithm2015. 1. 20. 08:50
이하는 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #include <stdio.h> #include <queue> #define MAX(a, b) (((a) > (b)) ? (a) : (b)) #pragma warning(disable:4996) using namespace std; typedef struct { int number; int length; } Cache; struct Compare { bool operator() (Cache left, Cache right) { return left.length < right.length; } }; int N; int board[501]; int main() { int C; scanf("%d", &C); for (int i = 0; i < C; i++) { scanf("%d", &N); priority_queue<Cache, vector<Cache>, Compare> maxHeap; for (int j = 0; j < N; j++) { scanf("%d", &board[j]); vector<Cache> temp; bool found = false; while (maxHeap.size() > 0) { Cache item = maxHeap.top(); if (item.number < board[j]) { Cache *newItem = new Cache; newItem->number = board[j]; newItem->length = item.length + 1; maxHeap.push(*newItem); found = true; break; } temp.push_back(item); maxHeap.pop(); } // if (!found) { Cache *newItem = new Cache; newItem->number = board[j]; newItem->length = 1; maxHeap.push(*newItem); } // for (int k = 0; k < temp.size(); k++) { maxHeap.push(temp.at(k)); } } printf("%d\n", maxHeap.top().length); } return 0; } | cs |
'뿌리튼튼 CS > Algorithm' 카테고리의 다른 글
외발뛰기(JUMPGAME) 정답 코드 (0) | 2015.01.27 |
---|---|
조세푸스 문제(JOSEPHUS) 정답 코드 (1) | 2015.01.26 |
타일링(TILING2) 정답 코드 (0) | 2015.01.17 |
삼각형 위의 최대 경로(TRIANGLEPATH) 정답 코드 (0) | 2015.01.17 |
보글게임(BOGGLE) 정답 코드 및 해설 (0) | 2014.11.22 |