kuangbin 数学训练一 Largest Box

题目链接:
传送门

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N = 200010;

int ca, t;
double l, w, x, v;

int main() {
	scanf("%d", &t);
	while(t--) {
		scanf("%lf%lf", &l, &w);
		//求最值对应的x坐标
		x = (4 * (w + l) - sqrt(16 * (w + l) * (w + l) - 48 * w * l)) / 24;
		//将坐标代入方程进行求解
		v = x * (w - 2 * x) * (l - 2 * x);
		printf("Case %d: %lf\n", ++ca, v);
	}
}

这是一道一元三次方程求最值的过程。
首先根据题题意我们可以设该盒子高为x, 那么长就等于l - 2 * x, 宽度等于w - 2 * x。将式子展开我们可以得到:v = 4 * x ^ 3 - 2 * (w + l) * x ^ 2 + w * l * x。将这个式子求导可得 v’ = 12 * x ^ 2 - 4 * (w + l) * x + w * l。由于这个是一个开口向上的一个二次函数因此导函数会先大于0,后小于0,最后再大于0。以此我们可求两个解中偏小的那一个。那个解即为我们要求的x。至于x的求法,代入求根公式即可,最后把x代入方程即为所求解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值