UVa Problem 103 - Stacking Boxes
// UVa Problem 103 - Stacking Boxes
// Verdict: Accepted
// Submission Date: 2011-10-17
// UVa Run Time: 0.012s
//
// (C)2011, 。metaphysis # yeah dot net
//
// [ ]
// 。
#include <algorithm>
#include <iostream>
using namespace std;
#define MAXD 10
#define MAXN 30
#define END (-1)
struct box
{
public:
int dimensionality[MAXD];
int dimensions;
int index;
bool operator<(const box &other) const
{
for (int i = 0; i < dimensions; i++)
if (dimensionality[i] != other.dimensionality[i])
return dimensionality[i] < other.dimensionality[i];
return false;
}
bool nests(const box &other) const
{
for (int i = 0; i < dimensions; i++)
if (dimensionality[i] >= other.dimensionality[i])
return false;
return true;
}
};
box boxes[MAXN];
int longest[MAXN];
int ancestor[MAXN];
int nBoxes, nDimensions;
void sequences(int current)
{
if (ancestor[current] != END)
sequences(ancestor[current]);
cout << (ancestor[current] == END ? "" : " ") << (boxes[current].index + 1);
}
void lis(void)
{
for (int i = 0; i < nBoxes; i++)
for (int j = 0; j < i; j++)
if (boxes[j].nests(boxes[i]) && (longest[j] + 1) > longest[i])
{
longest[i] = longest[j] + 1;
ancestor[i] = j;
}
int maximum = 0, marker;
for (int i = 0; i < nBoxes; i++)
if (maximum < longest[i])
{
maximum = longest[i];
marker = i;
}
cout << maximum << endl;
sequences(marker);
cout << endl;
}
int main(int ac, char *av[])
{
while (cin >> nBoxes >> nDimensions)
{
for (int i = 0; i < nBoxes; i++)
{
longest[i] = 1;
ancestor[i] = END;
boxes[i].dimensions = nDimensions;
boxes[i].index = i;
for (int j = 0; j < nDimensions; j++)
cin >> boxes[i].dimensionality[j];
sort(boxes[i].dimensionality, boxes[i].dimensionality + nDimensions);
}
sort(boxes, boxes + nBoxes);
lis();
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.