1 题目描述
2. 土豪金
成绩 | 20 | 开启时间 | 2021年09月17日 星期五 18:00 |
折扣 | 0.8 | 折扣时间 | 2021年11月6日 星期六 00:00 |
允许迟交 | 否 | 关闭时间 | 2021年11月21日 星期日 10:00 |
的金条,价值 元;另一种是长宽高为 的金条,价值 元。助教找到了一个装金条的箱子,箱子的长宽高为 。
现在想叫你装价值最高的金条进去,如果你装对了,他会给你1.5分的期末成绩。
输入描述
输入共一行三个整数 ,表示箱子的长宽高。
输出描述
2 代码
#include <stdio.h>
#include <stdlib.h>
// 判断a,b,c的值是否符合要求
int judge(long long a, long long b, long long c) {
if (a < 1 || a > 100000 || b < 1 || b > 100000 || c < 1 || c > 100000) {
return 1;
}
else {
return 0;
}
}
long sub_solution(long long a, long long b, long long c) {
long long money;
long long pri_money = 0;
long long temp_money1, temp_money2, temp_money3;
long long layer, left;
long long layer1, left1;
long long layer2, left2;
layer = c / 3; // 一开始下面能装的最贵的层数
left = c % 3; // 装完3米的之后剩下的上层空间,只能是1或2
// situation 1
layer1 = a / 3; // 横着放
left1 = a % 3;
layer2 = b / 3; // 最后一个边尝试放3米长的金条
left2 = b % 3;
pri_money =
5 * layer * a * b + 5 * layer1 * left * b + 5 * layer2 * left * left1;
money = pri_money;
if (money != 0 && left == 1 && left1 == 1 &&
left2 == 1) { // 考虑的是1*1*1的且不是只有那么大的情况
money = money + 1;
}
else if (money != 0 && left == 2 && left1 == 2 && left2 == 2) {
money = money + 2 * 5 + 3 * 1;
}
// else if(money!=0&&left==1&&left1==2&&left2==2){
// money = money+
// }
else if (left == 2 || left1 == 2 || left2 == 2) {
temp_money1 = pri_money + 3 * (left / 2) * left1 * left2;
temp_money2 = pri_money + 3 * (left1 / 2) * left * left2;
temp_money3 = pri_money + 3 * (left2 / 2) * left1 * left;
money = pri_money >= temp_money1 ? money : temp_money1;
money = money >= temp_money2 ? money : temp_money2;
money = money >= temp_money3 ? money : temp_money3;
}
return money;
}
long long solution(long long a, long long b, long long c) {
long long most_money = 0;
long long money[6];
int i;
money[0] = sub_solution(a, b, c);
money[1] = sub_solution(a, c, b);
money[2] = sub_solution(b, a, c);
money[3] = sub_solution(b, c, a);
money[4] = sub_solution(c, a, b);
money[5] = sub_solution(c, b, a);
for (i = 0; i < 6; i++) {
most_money = most_money >= money[i] ? most_money : money[i];
}
return most_money;
}
int main() {
long long a, b, c;
long long most_value;
// freopen("file.txt","r",stdin);
scanf("%lld %lld %lld", &a, &b, &c);
if (judge(a, b, c)) {
return 0;
}
most_value = solution(a, b, c);
printf("%lld\n", most_value);
return 0;
}