LightOJ

题目链接: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 } 
原文地址:https://www.cnblogs.com/fu3638/p/7425187.html