2. 土豪金

1 题目描述

2. 土豪金

成绩20开启时间2021年09月17日 星期五 18:00
折扣0.8折扣时间2021年11月6日 星期六 00:00
允许迟交关闭时间2021年11月21日 星期日 10:00

现在有两种金条,每种都有无限多个,一种是长宽高为 的金条,价值 元;另一种是长宽高为 的金条,价值 元。助教找到了一个装金条的箱子,箱子的长宽高为

现在想叫你装价值最高的金条进去,如果你装对了,他会给你1.5分的期末成绩。

输入描述

输入共一行三个整数 ,表示箱子的长宽高。

输出描述

输出一个数,表示箱子中金条的总价值的最大值。

 测试输入 期待的输出 时间限制 内存限制 额外进程
测试用例 1以文本方式显示
  1. 1 3 3↵
以文本方式显示
  1. 15↵
1秒64M0
测试用例 2以文本方式显示
  1. 3 4 4↵
以文本方式显示
  1. 80↵
1秒64M0
测试用例 3以文本方式显示
  1. 2 1 1↵
以文本方式显示
  1. 3↵
1秒64M0

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值