수조 최장 증가자 서열
// LIS[1,j] = max{LIS[1,k] + 1, 1}
#include <stdio.h>
#include <vector>
#include <boost/scoped_ptr.hpp>
void Print(int value) {
printf("%d ", value);
}
template<typename T, typename VisitFun>
void PrintSubarray(const std::vector<T>& array, const size_t* array_offset, size_t position, VisitFun visit_fun) {
if (position != array_offset[position]) {
size_t to_print = position;
PrintSubarray(array, array_offset, array_offset[position], visit_fun);
visit_fun(array[to_print]);
} else {
visit_fun(array[position]);
}
}
template<typename T>
void LongestIncreaseSubarray(const std::vector<T>& array) {
size_t max = 0;
size_t max_position = 0;
boost::scoped_ptr<size_t> max_length_buffer(new size_t[array.size()]);
size_t* max_length = max_length_buffer.get();
boost::scoped_ptr<size_t> array_offset_buffer(new size_t[array.size()]);
size_t* array_offset = array_offset_buffer.get();
for (size_t length = 1; length <= array.size(); ++length) {
max_length[length - 1] = 1;
array_offset[length -1] = length - 1;
for (size_t k = 0; k < length; ++k) {
if (array[k] < array[length - 1] && max_length[k] + 1 > max_length[length - 1]) {
max_length[length - 1] = max_length[k] + 1;
array_offset[length - 1] = k;
if (max_length[length - 1] > max) {
max = max_length[length - 1];
max_position = length -1;
printf("%zd
", max_position);
}
}
}
printf("--%zd
", max_length[length - 1]);
}
for (int i = 0; i < array.size(); ++i) {
printf("%zd ", array_offset[i]);
}
printf("
");
PrintSubarray(array, array_offset, max_position, Print);
}
int main(int argc, char** argv) {
int array_buffer[] = {1, 0, 1,4,5,2,6,1,7,2,8};
std::vector<int> array(array_buffer, array_buffer + sizeof(array_buffer) / sizeof(int));
LongestIncreaseSubarray(array);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.