UVA 437 The Tower of Babylon
5464 단어 uva
먼저 하나의 장방체를 3개로 바꾸어 저장한 다음에 바닥 면적의 크기에 따라 오름차순으로 배열하고 마지막으로 가장 긴 오름차순을 구하면 된다.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXD 110
int N, f[MAXD], a[5][MAXD], r[MAXD];
int cmp(const void *_p, const void *_q)
{
int *p = (int *)_p;
int *q = (int *)_q;
return a[0][*p] * a[1][*p] - a[0][*q] * a[1][*q];
}
int init()
{
int i;
scanf("%d", &N);
if(!N)
return 0;
N *= 3;
for(i = 0; i < N; i ++)
{
scanf("%d%d%d", &a[0][i], &a[1][i], &a[2][i]);
i ++;
a[2][i] = a[0][i - 1], a[0][i] = a[1][i - 1], a[1][i] = a[2][i - 1];
i ++;
a[2][i] = a[0][i - 1], a[0][i] = a[1][i - 1], a[1][i] = a[2][i - 1];
}
return 1;
}
void solve()
{
int i, j, ri, rj, temp, max;
for(i = 0; i < N; i ++)
r[i] = i;
qsort(r, N, sizeof(r[0]), cmp);
for(i = 0; i < N; i ++)
f[i] = a[2][r[i]];
for(i = 1; i < N; i ++)
{
ri = r[i];
for(j = 0; j < i; j ++)
{
rj = r[j];
if((a[0][rj] < a[0][ri] && a[1][rj] < a[1][ri]) || (a[0][rj] < a[1][ri] && a[1][rj] < a[0][ri]))
{
temp = f[j] + a[2][ri];
if(temp > f[i])
f[i] = temp;
}
}
}
max = 0;
for(i = 0; i < N; i ++)
if(f[i] > max)
max = f[i];
printf("%d
", max);
}
int main()
{
int t = 0;
while(init())
{
printf("Case %d: maximum height = ", ++ t);
solve();
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
UVA - 10986 Sending email(Dijkstra 인접 테이블 + 우선 순위 대기열 최적화)제목 대의: s점에서 t점까지의 최소 거리를 구하는 그림을 주세요. 확인: 적나라한 최단길이지만 n이 너무 크면 인접 행렬을 사용할 수 없기 때문에 Dijkstra에 대한 인접표 + 우선 대기열 최적화가 필요합니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.