Skip to content

Commit 4011b73

Browse files
authored
Rename block to block_
1 parent f1d0f16 commit 4011b73

File tree

1 file changed

+104
-0
lines changed

1 file changed

+104
-0
lines changed

block_

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
#include<iostream>
2+
#include<algorithm>
3+
#define MAX 20
4+
//메모이제이션..ㅜ
5+
using namespace std;
6+
7+
typedef struct rect
8+
{
9+
int h, w, d; //h:높이 w:세로 d:가로
10+
11+
}rect;
12+
13+
rect box[MAX];
14+
rect boxes[3*MAX];
15+
rect stack[MAX];
16+
int height[MAX];
17+
int set[MAX];
18+
int final_max=-1;
19+
20+
21+
bool compare(rect a, rect b) {
22+
if (a.d*a.w == b.d*b.w) {
23+
return a.d > b.d; }
24+
else
25+
return a.d*a.w > b.d*b.w;}
26+
27+
void max_height()
28+
{
29+
sort(stack, stack+MAX, compare);
30+
31+
for (int i = 0; i < MAX; i++ ){
32+
height[i] = stack[i].h;
33+
}
34+
35+
for (int i = 1; i < MAX; i++ )
36+
for (int j = 0; j < i; j++ ){
37+
if ( stack[i].w <= stack[j].w &&stack[i].d <= stack[j].d && height[i] < height[j] + stack[i].h ){
38+
height[i] = height[j] + stack[i].h;
39+
}
40+
}
41+
42+
int max = -1;
43+
44+
for ( int i = 0; i < 3*MAX; i++ )
45+
if ( max < height[i] ){
46+
max = height[i];
47+
}
48+
49+
if(final_max<max) final_max=max;
50+
}
51+
52+
void DFS(int now){
53+
int i,num;
54+
55+
num=set[now];
56+
for(i=set[now];i>=0;i--){
57+
set[now]=i;
58+
if(now+1==MAX) {
59+
for(int j=0;j<MAX;j++){
60+
stack[j].d=boxes[3*j+set[j]].d;
61+
stack[j].w=boxes[3*j+set[j]].w;
62+
stack[j].h=boxes[3*j+set[j]].h;
63+
}
64+
max_height();
65+
}
66+
if(now+1<MAX) DFS(now+1);
67+
set[now]=num;
68+
}
69+
}
70+
71+
72+
int main(void)
73+
{
74+
int a, b, c ;
75+
for (int i = 0; i < MAX; i++) {
76+
cout<<"block"<<i+1<<": ";
77+
cin>>a>>b>>c;
78+
box[i].h = a;
79+
box[i].d = b;
80+
box[i].w = c;
81+
set[i]=2;
82+
}
83+
84+
for (int i = 0; i < MAX; i++)
85+
{
86+
boxes[3*i].h = box[i].h;
87+
boxes[3*i].d = max(box[i].d, box[i].w);
88+
boxes[3*i].w = min(box[i].d, box[i].w);
89+
90+
boxes[3*i+1].h = box[i].w;
91+
boxes[3*i+1].d = max(box[i].h, box[i].d);
92+
boxes[3*i+1].w = min(box[i].h, box[i].d);
93+
94+
boxes[3*i+2].h = box[i].d;
95+
boxes[3*i+2].d = max(box[i].h, box[i].w);
96+
boxes[3*i+2].w = min(box[i].h, box[i].w);
97+
98+
}
99+
100+
DFS(0);
101+
cout<<"최대높이 : "<<final_max<<endl;
102+
103+
return 0;
104+
}

0 commit comments

Comments
 (0)