0%

51nod 1877 打包

题目:
又到了一年毕业季,Noder也从学校毕业了。现在Noder要把东西进行打包,打包完成后,Noder的所有东西都被装进了若干个长方体形状的收纳盒中,这些收纳盒的高都是1024,底座是正方形且边长都是1到6之间的整数。现在Noder要进行搬家了,他有一辆车,这个车子的后备箱是一个长方体,高为1024,底座为边长是6的正方形,那么Noder想知道,他最少要运几趟才能把他所有的东西运完呢?

解法:
题目还是比较容易理解的,矩形里面套矩形,怎么使得次数最少,分情况讨论即可(代码也太不简洁了)直接贴代码了😂😂
代码:

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include<stdio.h>
#include<iostream>
using namespace std;
int a[7];
int main()
{
for(int i = 1; i < 7; i++)
scanf("%d", &a[i]);
int ans = 0;
ans += (a[4] + a[5] + a[6]);
a[1] -= a[5] * 11;
a[5] = 0;
if(a[1] < 0)
a[1] = 0;

int p = a[2]/5;
if(p >= a[4])
{
a[2] -= a[4]*5;
a[4] = 0;
}
else
{
a[2] -= p*5;
a[4] -= p;
}
if(a[4] > 0)
{
if(a[1] > 0)
{
a[1] -= 20-a[2]*4;
a[2] = 0;
a[4]--;
a[1] -= a[4]*20;
}
else
a[2]=0;
if(a[1] < 0)
a[1] = 0;
}
//cout <<ans <<endl;
//for(int i = 1; i < 7; i++)
// printf("%d %d\n",i, a[i]);
ans += a[3] / 4;
a[3] = a[3] % 4;
ans += a[2] / 9;
a[2] = a[2] % 9;
//cout <<ans <<endl;
// for(int i = 1; i < 7; i++)
// printf("%d %d\n",i, a[i]);
// cout << ans <<endl;
if(a[3] == 0)
{
int sum = a[2] * 4 + a[1];
if(sum % 36 !=0)
ans += sum/36 + 1;
else
ans += sum/36;
}
else if(a[3] == 1)
{
if(a[2] >= 5)
{
a[2] -= 5;
a[1] -= 7;
if(a[1] < 0)
a[1] = 0;
ans++;
int sum = a[2] * 4 + a[1];
if(sum % 36 !=0)
ans += sum/36 + 1;
else
ans += sum/36;
}
else
{
int sum = 27 - a[2] * 4;
a[1] -= sum;
if(a[1]<0)
a[1] = 0;
ans++;
if(a[1] % 36 != 0)
ans += a[1]/36 +1;
else
ans += a[1]/36;
}
}
else if(a[3] == 2)
{
if(a[2] >= 3)
{
a[2] -=3;
a[1] -= 6;
if(a[1] < 0)
a[1] = 0;
ans++;
int sum = a[2] * 4 + a[1];
if(sum % 36 !=0)
ans += sum/36 + 1;
else
ans += sum/36;
}
else
{
int sum = 18 - a[2] * 4;
a[1] -= sum;
if(a[1]<0)
a[1] = 0;
ans++;
if(a[1] % 36 != 0)
ans += a[1]/36 +1;
else
ans += a[1]/36;
}
}
else if(a[3] == 3)
{
if(a[2] >= 1)
{
a[2] -= 1;
a[1] -= 5;
if(a[1] < 0)
a[1] = 0;
ans++;
int sum = a[2] * 4 + a[1];
if(sum % 36 !=0)
ans += sum/36 + 1;
else
ans += sum/36;
}
else{
int sum = 9;
a[1] -= sum;
if(a[1]<0)
a[1] = 0;
ans++;
if(a[1] % 36 != 0)
ans += a[1]/36 +1;
else
ans += a[1]/36;
}
}
printf("%d\n",ans);

}