题目链接:https://vjudge.net/contest/28079#problem/K
题目大意:给你一个长为L,宽为W的纸片,四个角剪掉边长为x的正方形,如下图所示,然后折成一个无盖的纸盒,求纸盒最大体积。
解题思路:我们可以知道体积V(x)=(L-2*x)*(W-2*x)*x求导得到f(x)=12x^2-4*(L+W)*x^2+L*W,V(x)的图像如下所示
所以我们知道极大值点是f(x)两个(或一个)零点中x值较小的那个点,可以通过求根公式求得。
代码:
1 #include<iostream> 2 #include<stdio.h> 3 #include<cmath> 4 using namespace std; 5 6 double L,W; 7 8 double fun(double x){ 9 return x*(L-2*x)*(W-2*x); 10 } 11 12 int main(){ 13 int T; 14 scanf("%d",&T); 15 int cas=0; 16 while(T--){ 17 scanf("%lf%lf",&L,&W); 18 double pos=(4*(L+W)-sqrt(16*(L+W)*(L+W)-4*12*L*W))/24.0; 19 printf("Case %d: %lf ",++cas,fun(pos)); 20 } 21 }