题目:
又到了一年毕业季,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);
}
|